2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /************************************<+>*************************************
24 ****************************************************************************
30 ** Description: Controls the Dtstyle Window Manager customization dialog
33 ** (c) Copyright Hewlett-Packard Company, 1990, 1993.
37 ****************************************************************************
38 ************************************<+>*************************************/
39 /* $XConsortium: Dtwm.c /main/4 1995/10/30 13:09:13 rswiston $ */
40 /*+++++++++++++++++++++++++++++++++++++++*/
42 /*+++++++++++++++++++++++++++++++++++++++*/
45 #include <Xm/MwmUtil.h>
50 #include <Xm/LabelG.h>
51 #include <Xm/PushBG.h>
52 #include <Xm/RowColumn.h>
53 #include <Xm/ToggleBG.h>
54 #include <Xm/SeparatoG.h>
55 #include <Xm/VendorSEP.h>
56 #include <Xm/MessageB.h>
58 #include <Dt/DialogBox.h>
60 #include <Dt/TitleBox.h>
62 #include <Dt/Message.h>
63 #include <Dt/HourGlass.h>
68 #include "SaveRestore.h"
73 /*+++++++++++++++++++++++++++++++++++++++*/
74 /* include extern functions */
75 /*+++++++++++++++++++++++++++++++++++++++*/
78 /*+++++++++++++++++++++++++++++++++++++++*/
80 /*+++++++++++++++++++++++++++++++++++++++*/
84 #define POINTER_STR "pointer"
85 #define EXPLICIT_STR "explicit"
87 #define NUM_PLACEMENT_ICONS 8
91 #define BOTTOM_RIGHT 3
95 #define RIGHT_BOTTOM 7
96 #define WARN_MSG ((char *)GETMESSAGE(18, 12, "The workspace manager must be restarted in\n\
97 order for your changes to take effect.\n\
98 Press OK to restart the workspace manager\n\
99 or Cancel to reset the changes."))
101 /*+++++++++++++++++++++++++++++++++++++++*/
102 /* Internal Functions */
103 /*+++++++++++++++++++++++++++++++++++++++*/
105 static Widget build_dtwmDlg ( Widget shell ) ;
106 static void formLayoutCB ( Widget, XtPointer, XtPointer ) ;
107 static void _DtmapCB_dtwmDlg ( Widget, XtPointer, XtPointer ) ;
108 static void systemDefaultCB ( Widget, XtPointer, XtPointer ) ;
109 static void ButtonCB ( Widget, XtPointer, XtPointer ) ;
110 static void getDtwmValues ( ) ;
111 static void _DtWmParseToLower (unsigned char *string) ;
112 static void okWarnCB ( Widget, XtPointer, XtPointer ) ;
113 static void cancelWarnCB ( Widget, XtPointer, XtPointer ) ;
115 /*+++++++++++++++++++++++++++++++++++++++*/
116 /* Internal Variables */
117 /*+++++++++++++++++++++++++++++++++++++++*/
121 Widget systemDefault;
122 Widget windowFocusTB;
123 Widget focusPolicyRC;
124 Widget focusSeparator;
128 Widget iconPlacementTB;
134 Boolean systemDefaultFlag;
135 int origKeyboardFocusPolicy;
136 int origFocusAutoRaise;
144 static saveRestore save = {FALSE, 0, };
146 static char dtwmRes[150]="";
148 static char *icon[] = {
159 static char *placementStr[] = {
170 /*+++++++++++++++++++++++++++++++++++++++*/
172 /*+++++++++++++++++++++++++++++++++++++++*/
178 if (style.dtwmDialog == NULL) {
179 _DtTurnOnHourGlass(shell);
180 build_dtwmDlg(shell);
182 XtManageChild(style.dtwmDialog);
183 _DtTurnOffHourGlass(shell);
187 XtManageChild(style.dtwmDialog);
188 raiseWindow(XtWindow(XtParent(style.dtwmDialog)));
190 dtwm.systemDefaultFlag = False;
193 /*+++++++++++++++++++++++++++++++++++++++*/
195 /*+++++++++++++++++++++++++++++++++++++++*/
200 char *str_type_return;
201 XrmValue value_return;
207 db = XtDatabase(style.display);
209 /* Get KeyboardFocusPolicy value */
210 if (status = XrmGetResource (db, "dtwm.keyboardFocusPolicy",
211 "Dtwm.KeyboardFocusPolicy",
212 &str_type_return, &value_return))
214 /* make local copy of string */
215 string = (char *) XtMalloc( value_return.size );
216 strcpy (string, value_return.addr);
218 /* convert to lower case */
219 _DtWmParseToLower((unsigned char *)string);
221 if (strcmp(string, "pointer") == 0)
223 XmToggleButtonGadgetSetState (dtwm.pointerTG, True, True);
224 dtwm.origKeyboardFocusPolicy = POINTER;
226 if (strcmp(string, "explicit") == 0)
228 XmToggleButtonGadgetSetState (dtwm.explicitTG, True, True);
229 dtwm.origKeyboardFocusPolicy = EXPLICIT;
233 else /* KeyboardFocusPolicy not specified */
235 /* set the Dtwm default value - explicit */
236 XmToggleButtonGadgetSetState (dtwm.explicitTG, True, True);
237 dtwm.origKeyboardFocusPolicy = EXPLICIT;
240 /* Get FocusAutoRaise value */
241 if (status = XrmGetResource (db, "dtwm.focusAutoRaise",
242 "Dtwm.FocusAutoRaise",
243 &str_type_return, &value_return))
245 /* make local copy of string */
246 string = (char *) XtMalloc( value_return.size );
247 strcpy (string, value_return.addr);
249 /* convert to lower case */
250 _DtWmParseToLower((unsigned char *)string);
252 dtwm.origFocusAutoRaise =
253 (strcmp(string, "true") ? False : True);
254 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
255 dtwm.origFocusAutoRaise, True);
259 else /* FocusAutoRaise not specified */
261 /* set the Dtwm default value:
262 * True when keyboardFocusPolicy is explicit
263 * False when keyboardFocusPolicy is pointer
265 dtwm.origFocusAutoRaise =
266 ((dtwm.origKeyboardFocusPolicy == EXPLICIT) ? True : False);
267 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
268 dtwm.origFocusAutoRaise, True);
271 /* Get SecStack value from secondaries OnTop resource*/
272 if (status = XrmGetResource (db, "dtwm.secondariesOnTop",
273 "Dtwm.secondariesOnTop",
274 &str_type_return, &value_return))
276 /* make local copy of string */
277 string = (char *) XtMalloc( value_return.size );
278 strcpy (string, value_return.addr);
280 /* convert to lower case */
281 _DtWmParseToLower((unsigned char *)string);
284 (strcmp(string, "true") ? False : True);
285 XmToggleButtonGadgetSetState (dtwm.secStackTG,
286 !dtwm.origSecStack, True);
290 else /* SecStack resource not specified */
293 dtwm.origSecStack = False;
294 XmToggleButtonGadgetSetState (dtwm.secStackTG,
295 !dtwm.origSecStack, False);
297 dtwm.origSecStack = True;
298 XmToggleButtonGadgetSetState (dtwm.secStackTG,
299 !dtwm.origSecStack, True);
302 /* Get UseIconBox value */
303 if (status = XrmGetResource (db, "dtwm.useIconBox",
305 &str_type_return, &value_return))
307 /* make local copy of string */
308 string = (char *) XtMalloc( value_return.size );
309 strcpy (string, value_return.addr);
311 /* convert to lower case */
312 _DtWmParseToLower((unsigned char *)string);
314 dtwm.origUseIconBox =
315 (strcmp(string, "true") ? False : True);
316 if (dtwm.origUseIconBox)
317 XmToggleButtonGadgetSetState (dtwm.iconBoxTG, True, True);
319 XmToggleButtonGadgetSetState (dtwm.desktopTG, True, True);
323 else /* UseIconBox not specified */
325 /* set the Dtwm default value - False, desktop - True*/
326 dtwm.origUseIconBox = False;
327 XmToggleButtonGadgetSetState (dtwm.desktopTG, True, True);
330 /* Get MoveOpaque value */
331 if (status = XrmGetResource (db, "dtwm.moveOpaque",
333 &str_type_return, &value_return))
335 /* make local copy of string */
336 string = (char *) XtMalloc( value_return.size );
337 strcpy (string, value_return.addr);
339 /* convert to lower case */
340 _DtWmParseToLower((unsigned char *)string);
342 dtwm.origMoveOpaque =
343 (strcmp(string, "true") ? False : True);
344 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
345 dtwm.origMoveOpaque, True);
349 else /* MoveOpaque not specified */
351 /* set the Dtwm default value: False */
353 dtwm.origMoveOpaque = False;
354 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
355 dtwm.origMoveOpaque, True);
360 /*+++++++++++++++++++++++++++++++++++++++*/
362 /*+++++++++++++++++++++++++++++++++++++++*/
369 XmString button_string[NUM_LABELS];
372 Widget windowFocusForm;
373 Widget iconPlacementForm;
375 Widget widgetList1[6];
377 /* get dtwm resource values */
379 /* Set up DialogBoxDialog button labels */
380 button_string[0] = CMPSTR(_DtOkString);
381 button_string[1] = CMPSTR(_DtCancelString);
382 button_string[2] = CMPSTR(_DtHelpString);
384 /* Create toplevel DialogBox */
386 * Note that save.poscnt has been initialized elsewhere.
387 * save.posArgs may contain information from restoreBeep().*/
389 XtSetArg(save.posArgs[save.poscnt], XmNbuttonCount, NUM_LABELS); save.poscnt++;
390 XtSetArg(save.posArgs[save.poscnt], XmNbuttonLabelStrings, button_string); save.poscnt++;
391 XtSetArg(save.posArgs[save.poscnt], XmNdefaultPosition, False);
394 __DtCreateDialogBoxDialog(shell, "dtwmDialog", save.posArgs, save.poscnt);
395 XtAddCallback(style.dtwmDialog, XmNhelpCallback,
396 (XtCallbackProc)HelpRequestCB, (XtPointer)HELP_DTWM_DIALOG);
398 XmStringFree(button_string[0]);
399 XmStringFree(button_string[1]);
400 XmStringFree(button_string[2]);
402 widgetList1[0] = _DtDialogBoxGetButton(style.dtwmDialog,2);
404 XtSetArg(args[n], XmNautoUnmanage, False); n++;
405 XtSetArg(args[n], XmNcancelButton, widgetList1[0]); n++;
406 XtSetValues (style.dtwmDialog, args, n);
409 XtSetArg(args[n], XmNtitle, ((char *)GETMESSAGE(18, 1, "Style Manager - Window"))); n++;
410 XtSetArg (args[n], XmNuseAsyncGeometry, True); n++;
411 XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC); n++;
412 XtSetValues (XtParent(style.dtwmDialog), args, n);
415 XtSetArg(args[n], XmNallowOverlap, False); n++;
416 XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
417 form = XmCreateForm(style.dtwmDialog, "dtwmForm", args, n);
420 XtSetArg(args[n], XmNfillMode, XmFILL_SELF); n++;
421 XtSetArg(args[n], XmNbehavior, XmICON_LABEL); n++;
422 XtSetArg(args[n], XmNpixmapForeground, style.secBSCol); n++;
423 XtSetArg(args[n], XmNpixmapBackground, style.secTSCol); n++;
424 XtSetArg(args[n], XmNstring, NULL); n++;
425 XtSetArg(args[n], XmNshadowThickness, 0); n++;
426 XtSetArg(args[n], XmNimageName, DTWM_ICON); n++;
427 XtSetArg(args[n], XmNtraversalOn, False); n++;
428 widgetList1[count++] =
429 dtwm.pictLabel = _DtCreateIcon(form, "dtwmpictLabel", args, n);
432 XtSetArg(args[n], XmNmarginHeight, LB_MARGIN_HEIGHT); n++;
433 XtSetArg(args[n], XmNmarginWidth, LB_MARGIN_WIDTH); n++;
434 string = CMPSTR(((char *)GETMESSAGE(18, 2, "Default")));
435 XtSetArg(args[n], XmNlabelString, string); n++;
436 widgetList1[count++] = dtwm.systemDefault =
437 XmCreatePushButtonGadget(form, "systemDefault", args, n);
438 XmStringFree(string);
441 string = CMPSTR((char *)GETMESSAGE(18, 3, "Window Behavior"));
442 XtSetArg(args[n], XmNtitleString, string); n++;
443 widgetList1[count++] = dtwm.windowFocusTB
444 = _DtCreateTitleBox(form, "windowFocusTB", args, n);
445 XmStringFree(string);
448 XtSetArg(args[n], XmNallowOverlap, False); n++;
449 XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
451 XmCreateForm(dtwm.windowFocusTB, "windowFocusForm", args, n);
454 string = CMPSTR((char *)GETMESSAGE(18, 4, "Window Icons"));
455 XtSetArg(args[n], XmNtitleString, string); n++;
456 widgetList1[count++] = dtwm.iconPlacementTB
457 = _DtCreateTitleBox(form, "iconPlacementTB", args, n);
458 XmStringFree(string);
461 XtSetArg(args[n], XmNallowOverlap, False); n++;
462 XtSetArg(args[n], XmNchildType, XmWORK_AREA); n++;
464 XmCreateForm(dtwm.iconPlacementTB, "iconPlacementForm", args, n);
467 XtSetArg(args[n], XmNmarginWidth, 0); n++;
468 XtSetArg(args[n], XmNmarginHeight, 0); n++;
470 XmCreateRadioBox(windowFocusForm, "focusPolicyRC", args, n);
473 string = CMPSTR((char *)GETMESSAGE(18, 13, "Point In Window To Make Active"));
474 XtSetArg(args[n], XmNlabelString, string); n++;
476 XmCreateToggleButtonGadget(dtwm.focusPolicyRC, "pointerTG", args, n);
477 XmStringFree(string);
480 string = CMPSTR((char *)GETMESSAGE(18, 14, "Click In Window To Make Active"));
481 XtSetArg(args[n], XmNlabelString, string); n++;
483 XmCreateToggleButtonGadget(dtwm.focusPolicyRC, "explicitTG", args, n);
484 XmStringFree(string);
487 XtSetArg(args[n], XmNmargin, 0); n++;
488 dtwm.focusSeparator =
489 XmCreateSeparatorGadget(windowFocusForm, "focusSeparator", args, n);
492 string = CMPSTR((char *)GETMESSAGE(18, 15, "Raise Window When Made Active"));
493 XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
494 XtSetArg(args[n], XmNlabelString, string); n++;
495 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
497 XmCreateToggleButtonGadget(windowFocusForm, "autoRaiseTG", args, n);
498 XmStringFree(string);
502 string = CMPSTR((char *)GETMESSAGE(18, 11, "Allow Primary Windows On Top"));
503 XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
504 XtSetArg(args[n], XmNlabelString, string); n++;
505 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
507 XmCreateToggleButtonGadget(windowFocusForm, "secStackTG", args, n);
508 XmStringFree(string);
511 string = CMPSTR((char *)GETMESSAGE(18, 16, "Show Contents During Move"));
512 XtSetArg(args[n], XmNnavigationType, XmTAB_GROUP); n++;
513 XtSetArg(args[n], XmNlabelString, string); n++;
514 XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++;
516 XmCreateToggleButtonGadget(windowFocusForm, "moveOpaqueTG", args, n);
517 XmStringFree(string);
520 XtSetArg(args[n], XmNmarginWidth, 0); n++;
521 XtSetArg(args[n], XmNmarginHeight, 0); n++;
523 XmCreateRadioBox(iconPlacementForm, "useIconBoxRC", args, n);
526 string = CMPSTR((char *)GETMESSAGE(18, 9, "Use Icon Box"));
527 XtSetArg(args[n], XmNlabelString, string); n++;
529 XmCreateToggleButtonGadget(dtwm.useIconBoxRC, "iconBoxTG", args, n);
530 XmStringFree(string);
533 string = CMPSTR((char *)GETMESSAGE(18, 10, "Place On Workspace"));
534 XtSetArg(args[n], XmNlabelString, string); n++;
536 XmCreateToggleButtonGadget(dtwm.useIconBoxRC, "desktopTG", args, n);
537 XmStringFree(string);
539 XtAddCallback(style.dtwmDialog, XmNmapCallback, formLayoutCB, NULL);
540 XtAddCallback(style.dtwmDialog, XmNmapCallback, _DtmapCB_dtwmDlg, shell);
541 XtAddCallback(style.dtwmDialog, XmNcallback, ButtonCB, NULL);
542 XtAddCallback(dtwm.systemDefault, XmNactivateCallback, systemDefaultCB, NULL);
545 XtManageChildren(widgetList1,count);
547 XtManageChild(windowFocusForm);
548 XtManageChild(iconPlacementForm);
550 XtManageChild(dtwm.focusPolicyRC);
551 XtManageChild(dtwm.pointerTG);
552 XtManageChild(dtwm.explicitTG);
554 XtManageChild(dtwm.focusSeparator);
555 XtManageChild(dtwm.autoRaiseTG);
556 XtManageChild(dtwm.secStackTG);
557 XtManageChild(dtwm.moveOpaqueTG);
559 XtManageChild(dtwm.useIconBoxRC);
560 XtManageChild(dtwm.iconBoxTG);
561 XtManageChild(dtwm.desktopTG);
563 return(style.dtwmDialog);
567 /*+++++++++++++++++++++++++++++++++++++++*/
569 /*+++++++++++++++++++++++++++++++++++++++*/
573 XtPointer client_data,
574 XtPointer call_data )
581 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
582 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
583 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
584 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
585 XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
586 XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++;
587 XtSetValues (dtwm.pictLabel, args, n);
591 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
592 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
593 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
594 XtSetArg(args[n], XmNleftAttachment, XmATTACH_NONE); n++;
595 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
596 XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
597 XtSetValues (dtwm.systemDefault, args, n);
599 /* Window Focus TitleBox */
601 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
602 XtSetArg(args[n], XmNtopWidget, dtwm.pictLabel); n++;
603 XtSetArg(args[n], XmNtopOffset, style.horizontalSpacing); n++;
604 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
605 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
606 XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
607 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
608 XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
609 XtSetValues (dtwm.windowFocusTB, args, n);
611 /* Icon Placement TitleBox */
613 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
614 XtSetArg(args[n], XmNtopWidget, dtwm.windowFocusTB); n++;
615 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
616 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
617 XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
618 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
619 XtSetArg(args[n], XmNleftOffset, style.horizontalSpacing); n++;
620 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
621 XtSetArg(args[n], XmNrightOffset, style.horizontalSpacing); n++;
622 XtSetValues (dtwm.iconPlacementTB, args, n);
626 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
627 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
628 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
629 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
630 XtSetArg(args[n], XmNleftOffset, 0); n++;
631 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
632 XtSetArg(args[n], XmNrightOffset, 0); n++;
633 XtSetValues (dtwm.focusPolicyRC, args, n);
637 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
638 XtSetArg(args[n], XmNtopWidget, dtwm.focusPolicyRC); n++;
639 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
640 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
641 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
642 XtSetArg(args[n], XmNleftOffset, 0); n++;
643 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
644 XtSetArg(args[n], XmNrightOffset, 0); n++;
645 XtSetValues (dtwm.focusSeparator, args, n);
649 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
650 XtSetArg(args[n], XmNtopWidget, dtwm.focusSeparator); n++;
651 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
652 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
653 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
654 XtSetArg(args[n], XmNleftOffset, 0); n++;
655 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
656 XtSetArg(args[n], XmNrightOffset, 0); n++;
657 XtSetValues (dtwm.autoRaiseTG, args, n);
661 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
662 XtSetArg(args[n], XmNtopWidget, dtwm.autoRaiseTG); n++;
663 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing-3); n++;
664 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++;
665 XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
666 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
667 XtSetArg(args[n], XmNleftOffset, 0); n++;
668 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
669 XtSetArg(args[n], XmNrightOffset, 0); n++;
670 XtSetValues (dtwm.secStackTG, args, n);
675 XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
676 XtSetArg(args[n], XmNtopWidget, dtwm.secStackTG); n++;
677 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing-3); n++;
678 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
679 XtSetArg(args[n], XmNbottomOffset, style.verticalSpacing); n++;
680 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
681 XtSetArg(args[n], XmNleftOffset, 0); n++;
682 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
683 XtSetArg(args[n], XmNrightOffset, 0); n++;
684 XtSetValues (dtwm.moveOpaqueTG, args, n);
686 /* Use Icon Box RC */
688 XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
689 XtSetArg(args[n], XmNtopOffset, style.verticalSpacing); n++;
690 XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
691 XtSetArg(args[n], XmNbottomOffset, 0); n++;
692 XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
693 XtSetArg(args[n], XmNleftOffset, 0); n++;
694 XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
695 XtSetArg(args[n], XmNrightOffset, 0); n++;
696 XtSetValues (dtwm.useIconBoxRC, args, n);
698 XtRemoveCallback(style.dtwmDialog, XmNmapCallback, formLayoutCB, NULL);
701 /*+++++++++++++++++++++++++++++++++++++++*/
702 /* _DtmapCB_dtwmDlg */
703 /*+++++++++++++++++++++++++++++++++++++++*/
707 XtPointer client_data,
708 XtPointer call_data )
711 static int first_time = 1;
716 DtWsmRemoveWorkspaceFunctions(style.display, XtWindow(XtParent(w)));
718 if (!save.restoreFlag)
719 putDialog ((Widget)client_data, w);
721 XtRemoveCallback(style.dtwmDialog, XmNmapCallback, _DtmapCB_dtwmDlg, NULL);
726 /*+++++++++++++++++++++++++++++++++++++++*/
727 /* systemDefaultCB */
728 /*+++++++++++++++++++++++++++++++++++++++*/
732 XtPointer client_data,
733 XtPointer call_data )
736 /* KeyboardFocusPolicy: explicit */
737 XmToggleButtonGadgetSetState (dtwm.explicitTG, True, True);
739 /* FocusAutoRaise: True */
740 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG, True, True);
743 /* Sun default is secStack: False */
744 XmToggleButtonGadgetSetState (dtwm.secStackTG, True, True);
747 XmToggleButtonGadgetSetState (dtwm.secStackTG, False, True);
750 /* OpaqueMove: False */
751 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG, False, True);
753 /* PlaceOnDesktop: True */
754 XmToggleButtonGadgetSetState (dtwm.desktopTG, True, True);
758 /*+++++++++++++++++++++++++++++++++++++++*/
760 /* callback for PushButtons in DialogBox */
761 /*+++++++++++++++++++++++++++++++++++++++*/
765 XtPointer client_data,
766 XtPointer call_data )
772 Boolean changeFlag = 0;
773 DtDialogBoxCallbackStruct *cb = (DtDialogBoxCallbackStruct *) call_data;
775 switch (cb->button_position)
781 /* create the Dtwm resource specs for xrdb */
783 state = XmToggleButtonGadgetGetState (dtwm.explicitTG);
784 if ( state != dtwm.origKeyboardFocusPolicy)
786 sprintf(dtwmRes, "Dtwm.keyboardFocusPolicy: %s\n",
787 XmToggleButtonGadgetGetState (dtwm.pointerTG)
788 ? POINTER_STR : EXPLICIT_STR);
792 /* write out FocusAutoRaise if toggle has changed or if
793 * KeyboardFocusPolicy has changed. FAR default value is
794 * based off of KFP so must set explicitly or visible toggle
795 * will be inacurate */
796 state = XmToggleButtonGadgetGetState (dtwm.autoRaiseTG);
797 if (state != dtwm.origFocusAutoRaise || changeFlag)
799 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*focusAutoRaise: %s\n",
800 XmToggleButtonGadgetGetState (dtwm.autoRaiseTG)
805 state = !XmToggleButtonGadgetGetState (dtwm.secStackTG);
806 if ( state != dtwm.origSecStack)
808 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*secondariesOnTop: %s\n",
809 XmToggleButtonGadgetGetState (dtwm.secStackTG)
814 state = XmToggleButtonGadgetGetState (dtwm.moveOpaqueTG);
815 if ( state != dtwm.origMoveOpaque)
817 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*moveOpaque: %s\n",
818 XmToggleButtonGadgetGetState (dtwm.moveOpaqueTG)
823 state = XmToggleButtonGadgetGetState (dtwm.iconBoxTG);
824 if (state != dtwm.origUseIconBox)
826 sprintf(dtwmRes+strlen(dtwmRes), "Dtwm*useIconBox: %s\n",
827 XmToggleButtonGadgetGetState (dtwm.iconBoxTG)
834 if (dtwm.warnDialog == NULL)
837 XtSetArg(args[n], XmNokLabelString, CMPSTR(_DtOkString)); n++;
838 XtSetArg(args[n], XmNcancelLabelString, CMPSTR(_DtCancelString)); n++;
839 XtSetArg(args[n], XmNborderWidth, 3); n++;
840 XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC ); n++;
841 XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;
842 XtSetArg(args[n], XmNdialogTitle, CMPSTR((char *)GETMESSAGE(2,2, "Notice"))); n++;
843 XtSetArg(args[n], XmNmessageString, CMPSTR(WARN_MSG)); n++;
844 dtwm.warnDialog = XmCreateInformationDialog(style.shell, "warnDialog", args, n);
846 XtUnmanageChild (XmMessageBoxGetChild(dtwm.warnDialog, XmDIALOG_HELP_BUTTON));
848 XtAddCallback(dtwm.warnDialog, XmNokCallback, okWarnCB,
850 XtAddCallback(dtwm.warnDialog, XmNcancelCallback, cancelWarnCB,
853 XtManageChild(dtwm.warnDialog);
861 /* reset to dtwm values from when dialog is mapped */
864 XmToggleButtonGadgetSetState (dtwm.pointerTG,
865 dtwm.origKeyboardFocusPolicy ? POINTER : EXPLICIT , True);
867 XmToggleButtonGadgetSetState (dtwm.explicitTG,
868 dtwm.origKeyboardFocusPolicy ? EXPLICIT : POINTER , True);
870 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
871 dtwm.origFocusAutoRaise ? True : False , True);
873 XmToggleButtonGadgetSetState (dtwm.secStackTG,
874 dtwm.origSecStack ? False : True , True);
876 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
877 dtwm.origMoveOpaque ? True : False , True);
879 XmToggleButtonGadgetSetState (dtwm.iconBoxTG,
880 dtwm.origUseIconBox ? True : False , True);
882 XmToggleButtonGadgetSetState (dtwm.desktopTG,
883 dtwm.origUseIconBox ? False : True , True);
888 XtCallCallbacks(style.dtwmDialog, XmNhelpCallback, (XtPointer)NULL);
897 /************************************************************************
900 * restore any state information saved with savedtwm.
901 * This is called from restoreSession with the application
902 * shell and the special xrm database retrieved for restore.
903 ************************************************************************/
910 XrmRepresentation rep_type;
913 xrm_name [0] = XrmStringToQuark ("dtwmDlg");
917 xrm_name [1] = XrmStringToQuark ("x");
918 if (XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value)){
919 XtSetArg (save.posArgs[save.poscnt], XmNx, atoi((char *)value.addr)); save.poscnt++;
920 save.restoreFlag = True;
924 xrm_name [1] = XrmStringToQuark ("y");
925 if (XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value)){
926 XtSetArg (save.posArgs[save.poscnt], XmNy, atoi((char *)value.addr)); save.poscnt++;
929 xrm_name [1] = XrmStringToQuark ("ismapped");
930 XrmQGetResource (db, xrm_name, xrm_name, &rep_type, &value);
931 /* Are we supposed to be mapped? */
932 if (strcmp(value.addr, "True") == 0)
936 /************************************************************************
939 * This routine will write out to the passed file descriptor any state
940 * information this dialog needs. It is called from saveSessionCB with the
941 * file already opened.
942 * All information is saved in xrm format. There is no restriction
943 * on what can be saved. It doesn't have to be defined or be part of any
944 * widget or Xt definition. Just name and save it here and recover it in
945 * restoreBackdrop. The suggested minimum is whether you are mapped, and your
947 ************************************************************************/
953 Dimension width, height;
954 char *bufr = style.tmpBigStr; /* size=[1024], make bigger if needed */
955 XmVendorShellExtObject vendorExt;
956 XmWidgetExtData extData;
958 if (style.dtwmDialog != NULL)
960 if (XtIsManaged(style.dtwmDialog))
961 sprintf(bufr, "*dtwmDlg.ismapped: True\n");
963 sprintf(bufr, "*dtwmDlg.ismapped: False\n");
965 /* Get and write out the geometry info for our Window */
966 x = XtX(XtParent(style.dtwmDialog));
967 y = XtY(XtParent(style.dtwmDialog));
969 /* Modify x & y to take into account window mgr frames
970 * This is pretty bogus, but I don't know a better way to do it.
972 extData = _XmGetWidgetExtData(style.shell, XmSHELL_EXTENSION);
973 vendorExt = (XmVendorShellExtObject)extData->widget;
974 x -= vendorExt->vendor.xOffset;
975 y -= vendorExt->vendor.yOffset;
977 width = XtWidth(style.dtwmDialog);
978 height = XtHeight(style.dtwmDialog);
980 sprintf(bufr, "%s*dtwmDlg.x: %d\n", bufr, x);
981 sprintf(bufr, "%s*dtwmDlg.y: %d\n", bufr, y);
982 sprintf(bufr, "%s*dtwmDlg.width: %d\n", bufr, width);
983 sprintf(bufr, "%s*dtwmDlg.height: %d\n", bufr, height);
984 write (fd, bufr, strlen(bufr));
989 /*************************************<->*************************************
991 * _DtWmParseToLower (string)
996 * Lower all characters in a string.
1001 * string = NULL-terminated character string or NULL
1006 * string = NULL-terminated lower case character string or NULL
1011 * Can handle multi-byte characters
1013 *************************************<->***********************************/
1016 void _DtWmParseToLower (unsigned char *string)
1018 unsigned char *pch = string;
1022 while ((chlen = mblen ((char *)pch, MB_CUR_MAX)) > 0)
1024 if ((chlen == 1) && (isupper (*pch)))
1026 *pch = tolower(*pch);
1031 while (*pch != NULL)
1035 *pch = tolower(*pch);
1041 } /* END OF FUNCTION _DtWmParseToLower */
1046 /*+++++++++++++++++++++++++++++++++++++++*/
1047 /* cancelWarnCB - callback for the */
1048 /* cancel button of the warnDialog */
1049 /*+++++++++++++++++++++++++++++++++++++++*/
1054 XtPointer client_data,
1055 XtPointer call_data )
1057 XmToggleButtonGadgetSetState (dtwm.pointerTG,
1058 dtwm.origKeyboardFocusPolicy ? POINTER : EXPLICIT , True);
1060 XmToggleButtonGadgetSetState (dtwm.explicitTG,
1061 dtwm.origKeyboardFocusPolicy ? EXPLICIT : POINTER , True);
1063 XmToggleButtonGadgetSetState (dtwm.autoRaiseTG,
1064 dtwm.origFocusAutoRaise ? True : False , True);
1066 XmToggleButtonGadgetSetState (dtwm.secStackTG,
1067 dtwm.origSecStack ? False : True , True);
1069 XmToggleButtonGadgetSetState (dtwm.moveOpaqueTG,
1070 dtwm.origMoveOpaque ? True : False , True);
1072 XmToggleButtonGadgetSetState (dtwm.iconBoxTG,
1073 dtwm.origUseIconBox ? True : False , True);
1075 XmToggleButtonGadgetSetState (dtwm.desktopTG,
1076 dtwm.origUseIconBox ? False : True , True);
1082 /*+++++++++++++++++++++++++++++++++++++++*/
1083 /* okWarnCB - callback for the */
1084 /* OK button of the warnDialog */
1085 /*+++++++++++++++++++++++++++++++++++++++*/
1090 XtPointer client_data,
1091 XtPointer call_data )
1093 dtwm.origKeyboardFocusPolicy = XmToggleButtonGadgetGetState (dtwm.explicitTG);
1094 dtwm.origFocusAutoRaise = XmToggleButtonGadgetGetState (dtwm.autoRaiseTG);
1095 dtwm.origSecStack = !XmToggleButtonGadgetGetState (dtwm.secStackTG);
1096 dtwm.origMoveOpaque = XmToggleButtonGadgetGetState (dtwm.moveOpaqueTG);
1097 dtwm.origUseIconBox = XmToggleButtonGadgetGetState (dtwm.iconBoxTG);
1100 /* write out resources to xrdb */
1101 _DtAddToResource(style.display, dtwmRes);
1103 /* force the workspace manager to restart */
1104 _DtWmRestartNoConfirm(style.display, style.root);