1 /************************************<+>*************************************
2 ****************************************************************************
8 ** Description: Controls the Dtstyle Window Manager customization dialog
11 ** (c) Copyright Hewlett-Packard Company, 1990, 1993.
15 ****************************************************************************
16 ************************************<+>*************************************/
17 /* $XConsortium: Dtwm.c /main/4 1995/10/30 13:09:13 rswiston $ */
18 /*+++++++++++++++++++++++++++++++++++++++*/
20 /*+++++++++++++++++++++++++++++++++++++++*/
23 #include <Xm/MwmUtil.h>
28 #include <Xm/LabelG.h>
29 #include <Xm/PushBG.h>
30 #include <Xm/RowColumn.h>
31 #include <Xm/ToggleBG.h>
32 #include <Xm/SeparatoG.h>
33 #include <Xm/VendorSEP.h>
34 #include <Xm/MessageB.h>
36 #include <Dt/DialogBox.h>
38 #include <Dt/TitleBox.h>
40 #include <Dt/Message.h>
41 #include <Dt/HourGlass.h>
46 #include "SaveRestore.h"
51 /*+++++++++++++++++++++++++++++++++++++++*/
52 /* include extern functions */
53 /*+++++++++++++++++++++++++++++++++++++++*/
56 /*+++++++++++++++++++++++++++++++++++++++*/
58 /*+++++++++++++++++++++++++++++++++++++++*/
62 #define POINTER_STR "pointer"
63 #define EXPLICIT_STR "explicit"
65 #define NUM_PLACEMENT_ICONS 8
69 #define BOTTOM_RIGHT 3
73 #define RIGHT_BOTTOM 7
74 #define WARN_MSG ((char *)GETMESSAGE(18, 12, "The workspace manager must be restarted in\n\
75 order for your changes to take effect.\n\
76 Press OK to restart the workspace manager\n\
77 or Cancel to reset the changes."))
79 /*+++++++++++++++++++++++++++++++++++++++*/
80 /* Internal Functions */
81 /*+++++++++++++++++++++++++++++++++++++++*/
83 static Widget build_dtwmDlg ( Widget shell ) ;
84 static void formLayoutCB ( Widget, XtPointer, XtPointer ) ;
85 static void _DtmapCB_dtwmDlg ( Widget, XtPointer, XtPointer ) ;
86 static void systemDefaultCB ( Widget, XtPointer, XtPointer ) ;
87 static void ButtonCB ( Widget, XtPointer, XtPointer ) ;
88 static void getDtwmValues ( ) ;
89 static void _DtWmParseToLower (unsigned char *string) ;
90 static void okWarnCB ( Widget, XtPointer, XtPointer ) ;
91 static void cancelWarnCB ( Widget, XtPointer, XtPointer ) ;
93 /*+++++++++++++++++++++++++++++++++++++++*/
94 /* Internal Variables */
95 /*+++++++++++++++++++++++++++++++++++++++*/
100 Widget windowFocusTB;
101 Widget focusPolicyRC;
102 Widget focusSeparator;
106 Widget iconPlacementTB;
112 Boolean systemDefaultFlag;
113 int origKeyboardFocusPolicy;
114 int origFocusAutoRaise;
122 static saveRestore save = {FALSE, 0, };
124 static char dtwmRes[150]="";
126 static char *icon[] = {
137 static char *placementStr[] = {
148 /*+++++++++++++++++++++++++++++++++++++++*/
150 /*+++++++++++++++++++++++++++++++++++++++*/
156 if (style.dtwmDialog == NULL) {
157 _DtTurnOnHourGlass(shell);
158 build_dtwmDlg(shell);
160 XtManageChild(style.dtwmDialog);
161 _DtTurnOffHourGlass(shell);
165 XtManageChild(style.dtwmDialog);
166 raiseWindow(XtWindow(XtParent(style.dtwmDialog)));
168 dtwm.systemDefaultFlag = False;
171 /*+++++++++++++++++++++++++++++++++++++++*/
173 /*+++++++++++++++++++++++++++++++++++++++*/
178 char *str_type_return;
179 XrmValue value_return;
185 db = XtDatabase(style.display);
187 /* Get KeyboardFocusPolicy value */
188 if (status = XrmGetResource (db, "dtwm.keyboardFocusPolicy",
189 "Dtwm.KeyboardFocusPolicy",
190 &str_type_return, &value_return))
192 /* make local copy of string */
193 string = (char *) XtMalloc( value_return.size );
194 strcpy (string, value_return.addr);
196 /* convert to lower case */
197 _DtWmParseToLower((unsigned char *)string);
199 if (strcmp(string, "pointer") == 0)
201 XmToggleButtonGadgetSetState (dtwm.pointerTG, True, True);
202 dtwm.origKeyboardFocusPolicy = POINTER;
204 if (strcmp(string, "explicit") == 0)
206 XmToggleButtonGadgetSetState (dtwm.explicitTG, True, True);
207 dtwm.origKeyboardFocusPolicy = EXPLICIT;
211 else /* KeyboardFocusPolicy not specified */
213 /* set the Dtwm default value - explicit */
214 XmToggleButtonGadgetSetState (dtwm.explicitTG, True, True);
215 dtwm.origKeyboardFocusPolicy = EXPLICIT;
218 /* Get FocusAutoRaise value */
219 if (status = XrmGetResource (db, "dtwm.focusAutoRaise",
220 "Dtwm.FocusAutoRaise",
221 &str_type_return, &value_return))
223 /* make local copy of string */
224 string = (char *) XtMalloc( value_return.size );
225 strcpy (string, value_return.addr);
227 /* convert to lower case */
228 _DtWmParseToLower((unsigned char *)string);
230 dtwm.origFocusAutoRaise =
231 (strcmp(string, "true") ? False : True);
232 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
233 dtwm.origFocusAutoRaise, True);
237 else /* FocusAutoRaise not specified */
239 /* set the Dtwm default value:
240 * True when keyboardFocusPolicy is explicit
241 * False when keyboardFocusPolicy is pointer
243 dtwm.origFocusAutoRaise =
244 ((dtwm.origKeyboardFocusPolicy == EXPLICIT) ? True : False);
245 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
246 dtwm.origFocusAutoRaise, True);
249 /* Get SecStack value from secondaries OnTop resource*/
250 if (status = XrmGetResource (db, "dtwm.secondariesOnTop",
251 "Dtwm.secondariesOnTop",
252 &str_type_return, &value_return))
254 /* make local copy of string */
255 string = (char *) XtMalloc( value_return.size );
256 strcpy (string, value_return.addr);
258 /* convert to lower case */
259 _DtWmParseToLower((unsigned char *)string);
262 (strcmp(string, "true") ? False : True);
263 XmToggleButtonGadgetSetState (dtwm.secStackTG,
264 !dtwm.origSecStack, True);
268 else /* SecStack resource not specified */
271 dtwm.origSecStack = False;
272 XmToggleButtonGadgetSetState (dtwm.secStackTG,
273 !dtwm.origSecStack, False);
275 dtwm.origSecStack = True;
276 XmToggleButtonGadgetSetState (dtwm.secStackTG,
277 !dtwm.origSecStack, True);
280 /* Get UseIconBox value */
281 if (status = XrmGetResource (db, "dtwm.useIconBox",
283 &str_type_return, &value_return))
285 /* make local copy of string */
286 string = (char *) XtMalloc( value_return.size );
287 strcpy (string, value_return.addr);
289 /* convert to lower case */
290 _DtWmParseToLower((unsigned char *)string);
292 dtwm.origUseIconBox =
293 (strcmp(string, "true") ? False : True);
294 if (dtwm.origUseIconBox)
295 XmToggleButtonGadgetSetState (dtwm.iconBoxTG, True, True);
297 XmToggleButtonGadgetSetState (dtwm.desktopTG, True, True);
301 else /* UseIconBox not specified */
303 /* set the Dtwm default value - False, desktop - True*/
304 dtwm.origUseIconBox = False;
305 XmToggleButtonGadgetSetState (dtwm.desktopTG, True, True);
308 /* Get MoveOpaque value */
309 if (status = XrmGetResource (db, "dtwm.moveOpaque",
311 &str_type_return, &value_return))
313 /* make local copy of string */
314 string = (char *) XtMalloc( value_return.size );
315 strcpy (string, value_return.addr);
317 /* convert to lower case */
318 _DtWmParseToLower((unsigned char *)string);
320 dtwm.origMoveOpaque =
321 (strcmp(string, "true") ? False : True);
322 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
323 dtwm.origMoveOpaque, True);
327 else /* MoveOpaque not specified */
329 /* set the Dtwm default value: False */
331 dtwm.origMoveOpaque = False;
332 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
333 dtwm.origMoveOpaque, True);
338 /*+++++++++++++++++++++++++++++++++++++++*/
340 /*+++++++++++++++++++++++++++++++++++++++*/
347 XmString button_string[NUM_LABELS];
350 Widget windowFocusForm;
351 Widget iconPlacementForm;
353 Widget widgetList1[6];
355 /* get dtwm resource values */
357 /* Set up DialogBoxDialog button labels */
358 button_string[0] = CMPSTR(_DtOkString);
359 button_string[1] = CMPSTR(_DtCancelString);
360 button_string[2] = CMPSTR(_DtHelpString);
362 /* Create toplevel DialogBox */
364 * Note that save.poscnt has been initialized elsewhere.
365 * save.posArgs may contain information from restoreBeep().*/
367 XtSetArg(save.posArgs[save.poscnt], XmNbuttonCount, NUM_LABELS); save.poscnt++;
368 XtSetArg(save.posArgs[save.poscnt], XmNbuttonLabelStrings, button_string); save.poscnt++;
369 XtSetArg(save.posArgs[save.poscnt], XmNdefaultPosition, False);
372 __DtCreateDialogBoxDialog(shell, "dtwmDialog", save.posArgs, save.poscnt);
373 XtAddCallback(style.dtwmDialog, XmNhelpCallback,
374 (XtCallbackProc)HelpRequestCB, (XtPointer)HELP_DTWM_DIALOG);
376 XmStringFree(button_string[0]);
377 XmStringFree(button_string[1]);
378 XmStringFree(button_string[2]);
380 widgetList1[0] = _DtDialogBoxGetButton(style.dtwmDialog,2);
382 XtSetArg(args[n], XmNautoUnmanage, False); n++;
383 XtSetArg(args[n], XmNcancelButton, widgetList1[0]); n++;
384 XtSetValues (style.dtwmDialog, args, n);
387 XtSetArg(args[n], XmNtitle, ((char *)GETMESSAGE(18, 1, "Style Manager - Window"))); n++;
388 XtSetArg (args[n], XmNuseAsyncGeometry, True); n++;
389 XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC); n++;
390 XtSetValues (XtParent(style.dtwmDialog), args, n);
393 XtSetArg(args[n], XmNallowOverlap, False); n++;
394 XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
395 form = XmCreateForm(style.dtwmDialog, "dtwmForm", args, n);
398 XtSetArg(args[n], XmNfillMode, XmFILL_SELF); n++;
399 XtSetArg(args[n], XmNbehavior, XmICON_LABEL); n++;
400 XtSetArg(args[n], XmNpixmapForeground, style.secBSCol); n++;
401 XtSetArg(args[n], XmNpixmapBackground, style.secTSCol); n++;
402 XtSetArg(args[n], XmNstring, NULL); n++;
403 XtSetArg(args[n], XmNshadowThickness, 0); n++;
404 XtSetArg(args[n], XmNimageName, DTWM_ICON); n++;
405 XtSetArg(args[n], XmNtraversalOn, False); n++;
406 widgetList1[count++] =
407 dtwm.pictLabel = _DtCreateIcon(form, "dtwmpictLabel", args, n);
410 XtSetArg(args[n], XmNmarginHeight, LB_MARGIN_HEIGHT); n++;
411 XtSetArg(args[n], XmNmarginWidth, LB_MARGIN_WIDTH); n++;
412 string = CMPSTR(((char *)GETMESSAGE(18, 2, "Default")));
413 XtSetArg(args[n], XmNlabelString, string); n++;
414 widgetList1[count++] = dtwm.systemDefault =
415 XmCreatePushButtonGadget(form, "systemDefault", args, n);
416 XmStringFree(string);
419 string = CMPSTR((char *)GETMESSAGE(18, 3, "Window Behavior"));
420 XtSetArg(args[n], XmNtitleString, string); n++;
421 widgetList1[count++] = dtwm.windowFocusTB
422 = _DtCreateTitleBox(form, "windowFocusTB", args, n);
423 XmStringFree(string);
426 XtSetArg(args[n], XmNallowOverlap, False); n++;
427 XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
429 XmCreateForm(dtwm.windowFocusTB, "windowFocusForm", args, n);
432 string = CMPSTR((char *)GETMESSAGE(18, 4, "Window Icons"));
433 XtSetArg(args[n], XmNtitleString, string); n++;
434 widgetList1[count++] = dtwm.iconPlacementTB
435 = _DtCreateTitleBox(form, "iconPlacementTB", args, n);
436 XmStringFree(string);
439 XtSetArg(args[n], XmNallowOverlap, False); n++;
440 XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
442 XmCreateForm(dtwm.iconPlacementTB, "iconPlacementForm", args, n);
445 XtSetArg(args[n], XmNmarginWidth, 0); n++;
446 XtSetArg(args[n], XmNmarginHeight, 0); n++;
448 XmCreateRadioBox(windowFocusForm, "focusPolicyRC", args, n);
451 string = CMPSTR((char *)GETMESSAGE(18, 13, "Point In Window To Make Active"));
452 XtSetArg(args[n], XmNlabelString, string); n++;
454 XmCreateToggleButtonGadget(dtwm.focusPolicyRC, "pointerTG", args, n);
455 XmStringFree(string);
458 string = CMPSTR((char *)GETMESSAGE(18, 14, "Click In Window To Make Active"));
459 XtSetArg(args[n], XmNlabelString, string); n++;
461 XmCreateToggleButtonGadget(dtwm.focusPolicyRC, "explicitTG", args, n);
462 XmStringFree(string);
465 XtSetArg(args[n], XmNmargin, 0); n++;
466 dtwm.focusSeparator =
467 XmCreateSeparatorGadget(windowFocusForm, "focusSeparator", args, n);
470 string = CMPSTR((char *)GETMESSAGE(18, 15, "Raise Window When Made Active"));
471 XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
472 XtSetArg(args[n], XmNlabelString, string); n++;
473 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
475 XmCreateToggleButtonGadget(windowFocusForm, "autoRaiseTG", args, n);
476 XmStringFree(string);
480 string = CMPSTR((char *)GETMESSAGE(18, 11, "Allow Primary Windows On Top"));
481 XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
482 XtSetArg(args[n], XmNlabelString, string); n++;
483 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
485 XmCreateToggleButtonGadget(windowFocusForm, "secStackTG", args, n);
486 XmStringFree(string);
489 string = CMPSTR((char *)GETMESSAGE(18, 16, "Show Contents During Move"));
490 XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
491 XtSetArg(args[n], XmNlabelString, string); n++;
492 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
494 XmCreateToggleButtonGadget(windowFocusForm, "moveOpaqueTG", args, n);
495 XmStringFree(string);
498 XtSetArg(args[n], XmNmarginWidth, 0); n++;
499 XtSetArg(args[n], XmNmarginHeight, 0); n++;
501 XmCreateRadioBox(iconPlacementForm, "useIconBoxRC", args, n);
504 string = CMPSTR((char *)GETMESSAGE(18, 9, "Use Icon Box"));
505 XtSetArg(args[n], XmNlabelString, string); n++;
507 XmCreateToggleButtonGadget(dtwm.useIconBoxRC, "iconBoxTG", args, n);
508 XmStringFree(string);
511 string = CMPSTR((char *)GETMESSAGE(18, 10, "Place On Workspace"));
512 XtSetArg(args[n], XmNlabelString, string); n++;
514 XmCreateToggleButtonGadget(dtwm.useIconBoxRC, "desktopTG", args, n);
515 XmStringFree(string);
517 XtAddCallback(style.dtwmDialog, XmNmapCallback, formLayoutCB, NULL);
518 XtAddCallback(style.dtwmDialog, XmNmapCallback, _DtmapCB_dtwmDlg, shell);
519 XtAddCallback(style.dtwmDialog, XmNcallback, ButtonCB, NULL);
520 XtAddCallback(dtwm.systemDefault, XmNactivateCallback, systemDefaultCB, NULL);
523 XtManageChildren(widgetList1,count);
525 XtManageChild(windowFocusForm);
526 XtManageChild(iconPlacementForm);
528 XtManageChild(dtwm.focusPolicyRC);
529 XtManageChild(dtwm.pointerTG);
530 XtManageChild(dtwm.explicitTG);
532 XtManageChild(dtwm.focusSeparator);
533 XtManageChild(dtwm.autoRaiseTG);
534 XtManageChild(dtwm.secStackTG);
535 XtManageChild(dtwm.moveOpaqueTG);
537 XtManageChild(dtwm.useIconBoxRC);
538 XtManageChild(dtwm.iconBoxTG);
539 XtManageChild(dtwm.desktopTG);
541 return(style.dtwmDialog);
545 /*+++++++++++++++++++++++++++++++++++++++*/
547 /*+++++++++++++++++++++++++++++++++++++++*/
551 XtPointer client_data,
552 XtPointer call_data )
559 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
560 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
561 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
562 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
563 XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
564 XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
565 XtSetValues (dtwm.pictLabel, args, n);
569 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
570 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
571 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
572 XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
573 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
574 XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
575 XtSetValues (dtwm.systemDefault, args, n);
577 /* Window Focus TitleBox */
579 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
580 XtSetArg(args[n], XmNtopWidget, dtwm.pictLabel); n++;
581 XtSetArg(args[n], XmNtopOffset, style.horizontalSpacing); n++;
582 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
583 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
584 XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
585 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
586 XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
587 XtSetValues (dtwm.windowFocusTB, args, n);
589 /* Icon Placement TitleBox */
591 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
592 XtSetArg(args[n], XmNtopWidget, dtwm.windowFocusTB); n++;
593 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
594 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
595 XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
596 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
597 XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
598 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
599 XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
600 XtSetValues (dtwm.iconPlacementTB, args, n);
604 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
605 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
606 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
607 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
608 XtSetArg(args[n], XmNleftOffset, 0); n++;
609 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
610 XtSetArg(args[n], XmNrightOffset, 0); n++;
611 XtSetValues (dtwm.focusPolicyRC, args, n);
615 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
616 XtSetArg(args[n], XmNtopWidget, dtwm.focusPolicyRC); n++;
617 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
618 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
619 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
620 XtSetArg(args[n], XmNleftOffset, 0); n++;
621 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
622 XtSetArg(args[n], XmNrightOffset, 0); n++;
623 XtSetValues (dtwm.focusSeparator, args, n);
627 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
628 XtSetArg(args[n], XmNtopWidget, dtwm.focusSeparator); n++;
629 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
630 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
631 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
632 XtSetArg(args[n], XmNleftOffset, 0); n++;
633 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
634 XtSetArg(args[n], XmNrightOffset, 0); n++;
635 XtSetValues (dtwm.autoRaiseTG, args, n);
639 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
640 XtSetArg(args[n], XmNtopWidget, dtwm.autoRaiseTG); n++;
641 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing-3); n++;
642 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
643 XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
644 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
645 XtSetArg(args[n], XmNleftOffset, 0); n++;
646 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
647 XtSetArg(args[n], XmNrightOffset, 0); n++;
648 XtSetValues (dtwm.secStackTG, args, n);
653 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
654 XtSetArg(args[n], XmNtopWidget, dtwm.secStackTG); n++;
655 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing-3); n++;
656 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
657 XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
658 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
659 XtSetArg(args[n], XmNleftOffset, 0); n++;
660 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
661 XtSetArg(args[n], XmNrightOffset, 0); n++;
662 XtSetValues (dtwm.moveOpaqueTG, args, n);
664 /* Use Icon Box RC */
666 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
667 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
668 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
669 XtSetArg(args[n], XmNbottomOffset, 0); n++;
670 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
671 XtSetArg(args[n], XmNleftOffset, 0); n++;
672 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
673 XtSetArg(args[n], XmNrightOffset, 0); n++;
674 XtSetValues (dtwm.useIconBoxRC, args, n);
676 XtRemoveCallback(style.dtwmDialog, XmNmapCallback, formLayoutCB, NULL);
679 /*+++++++++++++++++++++++++++++++++++++++*/
680 /* _DtmapCB_dtwmDlg */
681 /*+++++++++++++++++++++++++++++++++++++++*/
685 XtPointer client_data,
686 XtPointer call_data )
689 static int first_time = 1;
694 DtWsmRemoveWorkspaceFunctions(style.display, XtWindow(XtParent(w)));
696 if (!save.restoreFlag)
697 putDialog ((Widget)client_data, w);
699 XtRemoveCallback(style.dtwmDialog, XmNmapCallback, _DtmapCB_dtwmDlg, NULL);
704 /*+++++++++++++++++++++++++++++++++++++++*/
705 /* systemDefaultCB */
706 /*+++++++++++++++++++++++++++++++++++++++*/
710 XtPointer client_data,
711 XtPointer call_data )
714 /* KeyboardFocusPolicy: explicit */
715 XmToggleButtonGadgetSetState (dtwm.explicitTG, True, True);
717 /* FocusAutoRaise: True */
718 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG, True, True);
721 /* Sun default is secStack: False */
722 XmToggleButtonGadgetSetState (dtwm.secStackTG, True, True);
725 XmToggleButtonGadgetSetState (dtwm.secStackTG, False, True);
728 /* OpaqueMove: False */
729 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG, False, True);
731 /* PlaceOnDesktop: True */
732 XmToggleButtonGadgetSetState (dtwm.desktopTG, True, True);
736 /*+++++++++++++++++++++++++++++++++++++++*/
738 /* callback for PushButtons in DialogBox */
739 /*+++++++++++++++++++++++++++++++++++++++*/
743 XtPointer client_data,
744 XtPointer call_data )
750 Boolean changeFlag = 0;
751 DtDialogBoxCallbackStruct *cb = (DtDialogBoxCallbackStruct *) call_data;
753 switch (cb->button_position)
759 /* create the Dtwm resource specs for xrdb */
761 state = XmToggleButtonGadgetGetState (dtwm.explicitTG);
762 if ( state != dtwm.origKeyboardFocusPolicy)
764 sprintf(dtwmRes, "Dtwm.keyboardFocusPolicy: %s\n",
765 XmToggleButtonGadgetGetState (dtwm.pointerTG)
766 ? POINTER_STR : EXPLICIT_STR);
770 /* write out FocusAutoRaise if toggle has changed or if
771 * KeyboardFocusPolicy has changed. FAR default value is
772 * based off of KFP so must set explicitly or visible toggle
773 * will be inacurate */
774 state = XmToggleButtonGadgetGetState (dtwm.autoRaiseTG);
775 if (state != dtwm.origFocusAutoRaise || changeFlag)
777 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*focusAutoRaise: %s\n",
778 XmToggleButtonGadgetGetState (dtwm.autoRaiseTG)
783 state = !XmToggleButtonGadgetGetState (dtwm.secStackTG);
784 if ( state != dtwm.origSecStack)
786 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*secondariesOnTop: %s\n",
787 XmToggleButtonGadgetGetState (dtwm.secStackTG)
792 state = XmToggleButtonGadgetGetState (dtwm.moveOpaqueTG);
793 if ( state != dtwm.origMoveOpaque)
795 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*moveOpaque: %s\n",
796 XmToggleButtonGadgetGetState (dtwm.moveOpaqueTG)
801 state = XmToggleButtonGadgetGetState (dtwm.iconBoxTG);
802 if (state != dtwm.origUseIconBox)
804 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*useIconBox: %s\n",
805 XmToggleButtonGadgetGetState (dtwm.iconBoxTG)
812 if (dtwm.warnDialog == NULL)
815 XtSetArg(args[n], XmNokLabelString, CMPSTR(_DtOkString)); n++;
816 XtSetArg(args[n], XmNcancelLabelString, CMPSTR(_DtCancelString)); n++;
817 XtSetArg(args[n], XmNborderWidth, 3); n++;
818 XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC ); n++;
819 XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;
820 XtSetArg(args[n], XmNdialogTitle, CMPSTR((char *)GETMESSAGE(2,2, "Notice"))); n++;
821 XtSetArg(args[n], XmNmessageString, CMPSTR(WARN_MSG)); n++;
822 dtwm.warnDialog = XmCreateInformationDialog(style.shell, "warnDialog", args, n);
824 XtUnmanageChild (XmMessageBoxGetChild(dtwm.warnDialog, XmDIALOG_HELP_BUTTON));
826 XtAddCallback(dtwm.warnDialog, XmNokCallback, okWarnCB,
828 XtAddCallback(dtwm.warnDialog, XmNcancelCallback, cancelWarnCB,
831 XtManageChild(dtwm.warnDialog);
839 /* reset to dtwm values from when dialog is mapped */
842 XmToggleButtonGadgetSetState (dtwm.pointerTG,
843 dtwm.origKeyboardFocusPolicy ? POINTER : EXPLICIT , True);
845 XmToggleButtonGadgetSetState (dtwm.explicitTG,
846 dtwm.origKeyboardFocusPolicy ? EXPLICIT : POINTER , True);
848 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
849 dtwm.origFocusAutoRaise ? True : False , True);
851 XmToggleButtonGadgetSetState (dtwm.secStackTG,
852 dtwm.origSecStack ? False : True , True);
854 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
855 dtwm.origMoveOpaque ? True : False , True);
857 XmToggleButtonGadgetSetState (dtwm.iconBoxTG,
858 dtwm.origUseIconBox ? True : False , True);
860 XmToggleButtonGadgetSetState (dtwm.desktopTG,
861 dtwm.origUseIconBox ? False : True , True);
866 XtCallCallbacks(style.dtwmDialog, XmNhelpCallback, (XtPointer)NULL);
875 /************************************************************************
878 * restore any state information saved with savedtwm.
879 * This is called from restoreSession with the application
880 * shell and the special xrm database retrieved for restore.
881 ************************************************************************/
888 XrmRepresentation rep_type;
891 xrm_name [0] = XrmStringToQuark ("dtwmDlg");
895 xrm_name [1] = XrmStringToQuark ("x");
896 if (XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value)){
897 XtSetArg (save.posArgs[save.poscnt], XmNx, atoi((char *)value.addr)); save.poscnt++;
898 save.restoreFlag = True;
902 xrm_name [1] = XrmStringToQuark ("y");
903 if (XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value)){
904 XtSetArg (save.posArgs[save.poscnt], XmNy, atoi((char *)value.addr)); save.poscnt++;
907 xrm_name [1] = XrmStringToQuark ("ismapped");
908 XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value);
909 /* Are we supposed to be mapped? */
910 if (strcmp(value.addr, "True") == 0)
914 /************************************************************************
917 * This routine will write out to the passed file descriptor any state
918 * information this dialog needs. It is called from saveSessionCB with the
919 * file already opened.
920 * All information is saved in xrm format. There is no restriction
921 * on what can be saved. It doesn't have to be defined or be part of any
922 * widget or Xt definition. Just name and save it here and recover it in
923 * restoreBackdrop. The suggested minimum is whether you are mapped, and your
925 ************************************************************************/
931 Dimension width, height;
932 char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */
933 XmVendorShellExtObject vendorExt;
934 XmWidgetExtData extData;
936 if (style.dtwmDialog != NULL)
938 if (XtIsManaged(style.dtwmDialog))
939 sprintf(bufr, "*dtwmDlg.ismapped: True\n");
941 sprintf(bufr, "*dtwmDlg.ismapped: False\n");
943 /* Get and write out the geometry info for our Window */
944 x = XtX(XtParent(style.dtwmDialog));
945 y = XtY(XtParent(style.dtwmDialog));
947 /* Modify x & y to take into account window mgr frames
948 * This is pretty bogus, but I don't know a better way to do it.
950 extData = _XmGetWidgetExtData(style.shell, XmSHELL_EXTENSION);
951 vendorExt = (XmVendorShellExtObject)extData->widget;
952 x -= vendorExt->vendor.xOffset;
953 y -= vendorExt->vendor.yOffset;
955 width = XtWidth(style.dtwmDialog);
956 height = XtHeight(style.dtwmDialog);
958 sprintf(bufr, "%s*dtwmDlg.x: %d\n", bufr, x);
959 sprintf(bufr, "%s*dtwmDlg.y: %d\n", bufr, y);
960 sprintf(bufr, "%s*dtwmDlg.width: %d\n", bufr, width);
961 sprintf(bufr, "%s*dtwmDlg.height: %d\n", bufr, height);
962 write (fd, bufr, strlen(bufr));
967 /*************************************<->*************************************
969 * _DtWmParseToLower (string)
974 * Lower all characters in a string.
979 * string = NULL-terminated character string or NULL
984 * string = NULL-terminated lower case character string or NULL
989 * Can handle multi-byte characters
991 *************************************<->***********************************/
994 void _DtWmParseToLower (unsigned char *string)
996 unsigned char *pch = string;
1000 while ((chlen = mblen ((char *)pch, MB_CUR_MAX)) > 0)
1002 if ((chlen == 1) && (isupper (*pch)))
1004 *pch = tolower(*pch);
1009 while (*pch != NULL)
1013 *pch = tolower(*pch);
1019 } /* END OF FUNCTION _DtWmParseToLower */
1024 /*+++++++++++++++++++++++++++++++++++++++*/
1025 /* cancelWarnCB - callback for the */
1026 /* cancel button of the warnDialog */
1027 /*+++++++++++++++++++++++++++++++++++++++*/
1032 XtPointer client_data,
1033 XtPointer call_data )
1035 XmToggleButtonGadgetSetState (dtwm.pointerTG,
1036 dtwm.origKeyboardFocusPolicy ? POINTER : EXPLICIT , True);
1038 XmToggleButtonGadgetSetState (dtwm.explicitTG,
1039 dtwm.origKeyboardFocusPolicy ? EXPLICIT : POINTER , True);
1041 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
1042 dtwm.origFocusAutoRaise ? True : False , True);
1044 XmToggleButtonGadgetSetState (dtwm.secStackTG,
1045 dtwm.origSecStack ? False : True , True);
1047 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
1048 dtwm.origMoveOpaque ? True : False , True);
1050 XmToggleButtonGadgetSetState (dtwm.iconBoxTG,
1051 dtwm.origUseIconBox ? True : False , True);
1053 XmToggleButtonGadgetSetState (dtwm.desktopTG,
1054 dtwm.origUseIconBox ? False : True , True);
1060 /*+++++++++++++++++++++++++++++++++++++++*/
1061 /* okWarnCB - callback for the */
1062 /* OK button of the warnDialog */
1063 /*+++++++++++++++++++++++++++++++++++++++*/
1068 XtPointer client_data,
1069 XtPointer call_data )
1071 dtwm.origKeyboardFocusPolicy = XmToggleButtonGadgetGetState (dtwm.explicitTG);
1072 dtwm.origFocusAutoRaise = XmToggleButtonGadgetGetState (dtwm.autoRaiseTG);
1073 dtwm.origSecStack = !XmToggleButtonGadgetGetState (dtwm.secStackTG);
1074 dtwm.origMoveOpaque = XmToggleButtonGadgetGetState (dtwm.moveOpaqueTG);
1075 dtwm.origUseIconBox = XmToggleButtonGadgetGetState (dtwm.iconBoxTG);
1078 /* write out resources to xrdb */
1079 _DtAddToResource(style.display, dtwmRes);
1081 /* force the workspace manager to restart */
1082 _DtWmRestartNoConfirm(style.display, style.root);