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 libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /*****************************************************************************
29 ** Description: main Dtstyle program
32 ****************************************************************************
33 ************************************<+>*************************************/
34 /*$TOG: Main.c /main/16 1998/07/30 12:32:34 mgreess $*/
36 * (c) Copyright 1997, The Open Group
39 * (c) Copyright 1996 Digital Equipment Corporation.
40 * (c) Copyright 1990, 1993, 1996 Hewlett-Packard Company.
41 * (c) Copyright 1996 International Business Machines Corp.
42 * (c) Copyright 1996 Sun Microsystems, Inc.
43 * (c) Copyright 1996 Novell, Inc.
44 * (c) Copyright 1996 FUJITSU LIMITED.
45 * (c) Copyright 1996 Hitachi.
48 /*+++++++++++++++++++++++++++++++++++++++*/
50 /*+++++++++++++++++++++++++++++++++++++++*/
56 #ifndef NO_MESSAGE_CATALOG
57 # include <nl_types.h>
63 /* #include <sys/dir.h> */
65 #include <Xm/MwmUtil.h>
69 #include <Xm/MessageB.h>
71 #include <Dt/GetDispRes.h>
72 #include <Dt/EnvControlP.h>
73 #include <Dt/Message.h>
74 #include <Dt/SessionM.h>
75 #include <Dt/UserMsg.h>
77 #include <Dt/DtNlUtils.h>
81 #include "ColorMain.h"
82 #include "ColorFile.h"
86 /*+++++++++++++++++++++++++++++++++++++++*/
87 /* include extern functions */
88 /*+++++++++++++++++++++++++++++++++++++++*/
91 /*+++++++++++++++++++++++++++++++++++++++*/
93 /*+++++++++++++++++++++++++++++++++++++++*/
94 #define STYLE_LOCK "STYLE_LOCK"
95 #define SYS_FILE_SEARCH_PATH "DTPMSYSFILESEARCHPATH"
96 #define MAX_STR_LEN 128
98 /*+++++++++++++++++++++++++++++++++++++++*/
99 /* Internal Functions */
100 /*+++++++++++++++++++++++++++++++++++++++*/
103 static int ErrorHandler(
105 XErrorEvent *event ) ;
106 static int IOErrorHandler(
109 static void ToolkitErrorHandler(
111 static void errParentMap(
113 XtPointer client_data,
115 static void UnmanageCB(
117 XtPointer client_data,
118 XtPointer call_data) ;
119 static void DestroyCB(
121 XtPointer client_data,
122 XtPointer call_data) ;
123 static Boolean NewCreateD( XtPointer shell) ;
124 static Boolean NewAddTo( XtPointer shell) ;
125 static Boolean NewCreateTop1( XtPointer shell) ;
126 static Boolean NewCreateTop2( XtPointer shell) ;
127 static Boolean NewAddSysPath( XtPointer shell) ;
128 static Boolean NewAddDirectories( XtPointer shell) ;
129 static Boolean NewAddHomePath( XtPointer shell) ;
130 static Boolean NewReadPal( XtPointer shell) ;
131 static Boolean NewInitPal( XtPointer shell) ;
132 static Boolean NewAllocColor( XtPointer shell) ;
133 static Boolean NewBottomColor( XtPointer shell) ;
134 static Boolean NewCreateButtons( XtPointer shell) ;
136 extern void WaitChildDeath(void);
138 /*++++++++++++++++++++++++++++++++++++++*/
139 /* Internal Variables */
140 /*++++++++++++++++++++++++++++++++++++++*/
141 static XrmOptionDescRec option_list[] =
143 { "-session", "session", XrmoptionSepArg, NULL },
146 /*++++++++++++++++++++++++++++++++++++++*/
147 /* Global Variables */
148 /*++++++++++++++++++++++++++++++++++++++*/
152 /*+++++++++++++++++++++++++++++++++++++++++++*/
153 /*Misc functions all the dialogs use */
154 /*+++++++++++++++++++++++++++++++++++++++++++*/
156 /*+++++++++++++++++++++++++++++++++++++++++++*/
157 /* raise a dialog window above peer dialogs */
158 /* Needs the SHELL of the dialog, not the */
160 /*+++++++++++++++++++++++++++++++++++++++++++*/
165 static int changeMask = CWStackMode;
166 static XWindowChanges windowChanges = {0,0,0,0,0,0,Above};
168 XReconfigureWMWindow(style.display, dialogWin,
169 style.screenNum, changeMask, &windowChanges);
173 /************************************************************************
175 * - to be used with message dialogs (assumptions are being made that
176 * parent is dialog shell, and child is bb, due to Xm hacks for them)
177 * (eg. it sets bb x,y to 0,0 and parents x,y to x,y set for bb)
178 * - parent for positioning only (may not be real parent)
179 * - use client_data for parent... if NULL, use style.errParent if ok,
180 * - or main style.shell (makes this routine more generally usefull)
182 ************************************************************************/
186 XtPointer client_data,
187 XtPointer call_data )
194 /* figure out what to use as "visual" parent */
195 shell = (Widget)client_data;
198 if (!style.errParent || !XtParent(style.errParent) ||
199 !XtIsManaged(style.errParent))
202 shell = XtParent(style.errParent);
205 shell = XtParent(shell);
207 /* calculate new x,y to be centered in visualParent */
208 newX = XtX(shell) + XtWidth(shell)/2 - XtWidth(w)/2;
209 newY = XtY(shell) + XtHeight(shell)/2 - XtHeight(w)/2;
211 if (newX < 0) newX = 0;
212 if (newY < 0) newY = 0;
215 XtSetArg(args[n], XmNx, newX); n++;
216 XtSetArg(args[n], XmNy, newY); n++;
217 XtSetValues(w, args, n);
221 /*************************************************************/
223 /* Put up an error dialog and block until the user clicks OK */
224 /* by default, there is no cancel or help button, but the */
225 /* dialog is created with autoUnmanage false, and ok/cancel */
226 /* callbacks to do the unmanage, so that a help button can */
228 /*************************************************************/
232 Widget visualParent )
238 /* create the compound string */
239 style.tmpXmStr = CMPSTR(errString);
241 style.errParent = visualParent;
243 if (style.errDialog == NULL) /* create it */
245 ok = XmStringCreateLocalized((String) _DtOkString);
248 XtSetArg(args[n], XmNokLabelString, ok); n++;
249 XtSetArg(args[n], XmNmessageString, style.tmpXmStr); n++;
250 XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC); n++;
251 XtSetArg (args[n], XmNautoUnmanage, False); n++;
252 XtSetArg (args[n], XmNdefaultPosition, False); n++;
253 style.errDialog = XmCreateErrorDialog(style.shell,"ErrorNotice",args,n);
255 XtAddCallback (style.errDialog, XmNokCallback, UnmanageCB, NULL);
256 XtAddCallback (style.errDialog, XmNcancelCallback, UnmanageCB, NULL);
257 XtAddCallback (style.errDialog, XmNmapCallback, CenterMsgCB, NULL);
258 XtUnmanageChild ( XmMessageBoxGetChild (style.errDialog,
259 XmDIALOG_CANCEL_BUTTON));
260 XtUnmanageChild ( XmMessageBoxGetChild (style.errDialog,
261 XmDIALOG_HELP_BUTTON));
263 /* set the dialog shell parent title */
265 XtSetArg (args[n], XmNmwmInputMode,
266 MWM_INPUT_PRIMARY_APPLICATION_MODAL); n++;
267 XtSetArg (args[n], XmNuseAsyncGeometry, True); n++;
268 XtSetArg (args[n], XmNtitle, ((char *)GETMESSAGE(2, 3, "Error"))); n++;
269 XtSetValues (XtParent(style.errDialog), args, n);
271 else /* change the string */
274 XtSetArg(args[n], XmNmessageString, style.tmpXmStr); n++;
275 XtSetValues (style.errDialog, args, n);
278 /* free the compound string */
279 XmStringFree (style.tmpXmStr);
281 if (XtIsManaged(style.errParent) || XtParent(style.errParent) == NULL)
283 XtManageChild(style.errDialog);
284 /* ring the bell (PM behavior) */
285 XBell(style.display, 0);
289 XtAddEventHandler(XtParent(style.errParent), StructureNotifyMask, 0,
290 (XtEventHandler)errParentMap, NULL);
300 XtPointer client_data,
303 if (event->type == MapNotify)
305 XtManageChild(style.errDialog);
306 /* ring the bell (PM behavior) */
307 XBell(style.display, 0);
308 XtRemoveEventHandler(XtParent(style.errParent), StructureNotifyMask,
309 0, (XtEventHandler)errParentMap, NULL);
313 /*********************************************************/
315 /* Put up a modeless info dialog. */
316 /* There is no cancel or help button. */
317 /* Dialog is created with autoUnmanage true. */
318 /* An ok callback is added which will destroy the dialog */
319 /* and optionally unmap the parent. */
320 /*********************************************************/
325 Boolean unmapParent )
329 static XmString ok = NULL;
332 /* create the compound string */
333 style.tmpXmStr = CMPSTR(infoString);
336 ok = CMPSTR((String) _DtOkString);
340 XtSetArg(args[n], XmNokLabelString, ok); n++;
341 XtSetArg(args[n], XmNmessageString, style.tmpXmStr); n++;
342 XtSetArg(args[n], XmNdialogStyle, XmDIALOG_MODELESS); n++;
343 XtSetArg(args[n], XmNmwmFunctions, DIALOG_MWM_FUNC); n++;
344 w = XmCreateInformationDialog(parent, "Notice", args, n);
347 XtAddCallback (w, XmNokCallback, DestroyCB, parent);
349 XtAddCallback (w, XmNokCallback, DestroyCB, NULL);
350 XtUnmanageChild ( XmMessageBoxGetChild(w, XmDIALOG_CANCEL_BUTTON) );
351 XtUnmanageChild ( XmMessageBoxGetChild(w, XmDIALOG_HELP_BUTTON) );
353 /* set the dialog shell parent title */
355 XtSetArg (args[n], XmNuseAsyncGeometry, True); n++;
356 XtSetArg (args[n], XmNtitle, ((char *)GETMESSAGE(2, 2, "Notice"))); n++;
357 XtSetValues (XtParent(w), args, n);
359 /* free the compound string */
360 XmStringFree (style.tmpXmStr);
362 /* manage the info dialog */
368 /*++++++++++++++++++++++++++++++++++++++*/
370 /*++++++++++++++++++++++++++++++++++++++*/
374 XtPointer client_data,
375 XtPointer call_data )
381 /*++++++++++++++++++++++++++++++++++++++*/
383 /*++++++++++++++++++++++++++++++++++++++*/
387 XtPointer client_data,
388 XtPointer call_data )
390 XtDestroyWidget(XtParent(w));
391 if (client_data != NULL)
392 XtUnmanageChild((Widget)client_data);
396 /**********************************************************/
398 /* move a dialog up so it isn't covering the main window */
399 /* Or down if there is no room up. */
400 /* note: "parent" needs to have valid x,y information... */
401 /* ex: a child of dialog shell doesn't, its parent */
402 /* does, so the parent shell would be passed in */
403 /**********************************************************/
410 Position newX, newY, pY, pX;
411 Dimension pHeight, myHeight, pWidth, myWidth;
416 pHeight = XtHeight(parent);
417 pWidth = XtWidth(parent);
418 myHeight = XtHeight(dialog);
419 myWidth = XtWidth(dialog);
421 if ((newY = pY - myHeight +5) < 0)
423 newX = pX + pWidth/2 - myWidth/2;
426 XtSetArg(args[n], XmNx, newX); n++;
427 XtSetArg(args[n], XmNy, newY); n++;
428 XtSetValues(dialog,args,n);
431 printf("newX, newY, pY, pX;\n");
432 printf("%d %d %d %d\n",newX, newY, pY, pX);
433 printf("pHeight, myHeight, pWidth, myWidth;\n");
434 printf("%d %d %d %d\n", pHeight, myHeight, pWidth, myWidth);
439 /*++++++++++++++++++++++++++++++++++++++*/
441 /*++++++++++++++++++++++++++++++++++++++*/
450 XPropertyEvent *pEvent=(XPropertyEvent *)&event;
452 Boolean useMaskRtn, useIconFileCacheRtn;
462 XtSetLanguageProc(NULL, NULL, NULL);
463 _DtEnvControl(DT_ENV_SET);
466 /* Initialize the toolkit and open the display */
468 XtInitialize(argv[0], XMCLASS, option_list, 1, (int *)&argc, argv);
470 /* Allow all WS manipulation functions except resize and maximize */
471 mwmFunc = MWM_FUNC_ALL ^ (MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE);
474 XtSetArg(args[n], XmNmwmFunctions, mwmFunc); n++;
475 XtSetArg(args[n], XmNuseAsyncGeometry, True); n++;
476 XtSetValues(style.shell, args, n);
478 /* initialize global style data */
480 style.display = XtDisplay(style.shell);
481 style.screen = DefaultScreenOfDisplay(style.display);
482 style.screenNum = DefaultScreen(style.display);
483 style.colormap = DefaultColormap(style.display, style.screenNum);
484 style.root = DefaultRootWindow(style.display);
485 style.execName = argv[0];
486 style.errDialog = NULL;
487 style.tmpXmStr = NULL;
488 style.home = (char *) XtMalloc(strlen((char *) getenv("HOME")) + 1);
489 strcpy(style.home, (char *) getenv("HOME"));
490 style.colorDialog = NULL;
491 style.backdropDialog = NULL;
492 style.fontDialog = NULL;
493 style.kbdDialog = NULL;
494 style.mouseDialog = NULL;
495 style.audioDialog = NULL;
496 style.screenDialog = NULL;
497 style.startupDialog = NULL;
498 style.dtwmDialog = NULL;
499 style.i18nDialog = NULL;
500 visual = XDefaultVisual(style.display,style.screenNum);
501 style.visualClass = visual->class;
503 if (progName = DtStrrchr(argv[0], '/')) progName++;
504 else progName = argv[0];
506 /* Get the lock established to ensure only one dtstyle process
507 * is running per screen .. first malloc enough space*/
509 if (_DtGetLock (style.display, STYLE_LOCK) == 0)
511 _DtSimpleError (progName, DtError, NULL, "%s",
512 ((char *)GETMESSAGE(2, 5, "Style Manager is already running, second attempt aborted.")));
516 InitDtstyleProtocol();
517 SetWindowProperties();
519 /* Register error handlers */
520 XSetErrorHandler(ErrorHandler);
521 XSetIOErrorHandler(IOErrorHandler);
522 XtAppSetErrorHandler(XtWidgetToApplicationContext(style.shell),
523 ToolkitErrorHandler);
524 XtAddEventHandler(style.shell, StructureNotifyMask, 0,
525 (XtEventHandler)MwmReparentNotify, NULL);
527 /* set up resolution dependent layout variables */
528 switch (_DtGetDisplayResolution(style.display, style.screenNum))
530 case LOW_RES_DISPLAY:
531 style.horizontalSpacing =
532 style.verticalSpacing = 3;
535 case MED_RES_DISPLAY:
536 style.horizontalSpacing =
537 style.verticalSpacing = 5;
540 case HIGH_RES_DISPLAY:
541 style.horizontalSpacing =
542 style.verticalSpacing = 8;
546 GetApplicationResources();
548 XmeGetIconControlInfo(style.screen, &useMaskRtn,
549 &style.useMultiColorIcons, &useIconFileCacheRtn);
552 /* add the directory $HOME/.dt/backdrops */
554 string = (char *)XtMalloc(strlen(style.home) + strlen("/.dt/backdrops:") + 1);
555 sprintf(string, "%s/.dt/backdrops:", style.home);
557 dirs = (char *)XtCalloc(1, strlen("/etc/dt/backdrops:/usr/dt/backdrops") +
558 (style.xrdb.backdropDir == NULL ? 2 :
559 strlen(style.xrdb.backdropDir)) +
563 strcpy(dirs, string);
564 if (style.xrdb.backdropDir)
566 strcat(dirs, style.xrdb.backdropDir);
569 strcat(dirs, "/etc/dt/backdrops:/usr/dt/backdrops");
571 _DtWsmSetBackdropSearchPath(style.screen, dirs, style.useMultiColorIcons);
573 XtFree((char *)string);
575 XtFree((char *)dirs);
580 /* if this is started from save session we need to set up the BMS
581 first, otherwise do it after making the window. (for user perception
582 for how long it takes for the dtstyle to come up) */
583 if(style.xrdb.session != NULL) {
584 DtInitialize (style.display, style.shell, progName, progName);
585 /*Restore a session or build and display the main Window.*/
586 if(!restoreSession(style.shell,style.xrdb.session))
587 init_mainWindow(style.shell);
590 init_mainWindow(style.shell);
591 DtInitialize (style.display, style.shell, progName, progName);
593 CheckMonitor(style.shell);
594 GetDefaultPal(style.shell);
597 signal(SIGINT,(void (*)())activateCB_exitBtn);
598 signal(SIGTERM,(void (*)())activateCB_exitBtn);
600 /* to avoid defunct screen saver processes */
601 signal(SIGCHLD, (void (*)())WaitChildDeath);
603 /* backdrop dialog needs to know when the workspace changes to recolor
604 the bitmap displayed in the dialog */
605 ListenForWorkspaceChange();
607 /* if using COLOR builtin, style.workProcs is True */
609 if ((XmeUseColorObj() != FALSE) && style.workProcs)
611 XtAppAddWorkProc(XtWidgetToApplicationContext(style.shell),
612 NewCreateD, style.shell);
614 XtAppMainLoop(XtWidgetToApplicationContext(style.shell));
619 /************************************************************************
623 ************************************************************************/
630 #define _DTSTYLE_BUFSIZE 1024
631 char errmsg[_DTSTYLE_BUFSIZE];
633 _DtPrintDefaultErrorSafe(disp, event, errmsg, _DTSTYLE_BUFSIZE);
634 _DtSimpleError(progName, DtWarning, NULL, errmsg, NULL);
636 /* We do not want to exit here lets try to continue... */
641 /************************************************************************
645 ************************************************************************/
647 IOErrorHandler (Display *display)
650 Warning ("X IO error occurred during generic operation");
659 /************************************************************************
661 * ToolkitErrorHandler
663 * All Xt memory allocation errors should fall through to this routine.
664 * There is no need to check for Xtmalloc errors where they are used.
666 ************************************************************************/
672 _DtSimpleError (progName, DtError, NULL,
673 GETMESSAGE(2, 6, "An X Toolkit error occurred... Exiting.\n"));
683 struct timeval first, second, lapsed;
686 gettimeofday(&first, &tzp);
689 /* Create the Dialog Box Dialog */
690 CreateDialogBoxD((Widget)shell);
693 gettimeofday(&second, &tzp);
694 if(first.tv_usec > second.tv_usec){
695 second.tv_usec += 1000000;
698 printf("CreateDialogBoxD elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
701 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewAddTo, shell);
711 struct timeval first, second, lapsed;
714 gettimeofday(&first, &tzp);
717 /* Create the Dialog Box Dialog */
721 gettimeofday(&second, &tzp);
722 if(first.tv_usec > second.tv_usec){
723 second.tv_usec += 1000000;
726 printf("AddToDialogBox elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
729 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewCreateTop1, shell);
739 struct timeval first, second, lapsed;
742 gettimeofday(&first, &tzp);
745 /* Create the top portion of the color dialog */
749 gettimeofday(&second, &tzp);
750 if(first.tv_usec > second.tv_usec){
751 second.tv_usec += 1000000;
754 printf("CreateTopColor1 elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
757 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewCreateTop2, shell);
766 struct timeval first, second, lapsed;
769 gettimeofday(&first, &tzp);
772 /* Create the top portion of the color dialog */
776 gettimeofday(&second, &tzp);
777 if(first.tv_usec > second.tv_usec){
778 second.tv_usec += 1000000;
781 printf("CreateTopColor2 elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
784 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewAddSysPath, shell);
794 struct timeval first, second, lapsed;
797 gettimeofday(&first, &tzp);
800 /* initialize the system directory */
804 gettimeofday(&second, &tzp);
805 if(first.tv_usec > second.tv_usec){
806 second.tv_usec += 1000000;
809 printf("AddSystemPath elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
812 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewAddDirectories, shell);
822 struct timeval first, second, lapsed;
825 gettimeofday(&first, &tzp);
828 /* initialize the directorys list in the resource */
829 if(style.xrdb.paletteDir != NULL)
830 AddDirectories(style.xrdb.paletteDir);
835 gettimeofday(&second, &tzp);
836 if(first.tv_usec > second.tv_usec){
837 second.tv_usec += 1000000;
840 printf("AddDirectories elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
843 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewAddHomePath, shell);
853 struct timeval first, second, lapsed;
856 gettimeofday(&first, &tzp);
859 /* initialize the home directory */
863 gettimeofday(&second, &tzp);
864 if(first.tv_usec > second.tv_usec){
865 second.tv_usec += 1000000;
868 printf("AddHomePath elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
871 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewReadPal, shell);
881 struct timeval first, second, lapsed;
884 gettimeofday(&first, &tzp);
887 /* Read in the palettes one at a time */
888 if (ReadPaletteLoop(True)) {
891 gettimeofday(&second, &tzp);
892 if(first.tv_usec > second.tv_usec){
893 second.tv_usec += 1000000;
896 printf("ReadPaletteLoop DONE elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
899 /* Stop work procs if no palettes found - fatal color error.
900 * When the color button is pressed, the regular processing
901 * will pick up on NumOfPalettes == 0 and post an error
904 if (NumOfPalettes == 0)
907 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewInitPal, shell);
912 gettimeofday(&second, &tzp);
913 if(first.tv_usec > second.tv_usec){
914 second.tv_usec += 1000000;
917 printf("ReadPaletteLoop NOT DONE elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
929 struct timeval first, second, lapsed;
932 gettimeofday(&first, &tzp);
935 /* initialize the palette list */
936 if(InitializePaletteList((Widget)shell, paletteList, True)) {
939 gettimeofday(&second, &tzp);
940 if(first.tv_usec > second.tv_usec){
941 second.tv_usec += 1000000;
944 printf("InitializePaletteList DONE elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
947 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewAllocColor, shell);
952 gettimeofday(&second, &tzp);
953 if(first.tv_usec > second.tv_usec){
954 second.tv_usec += 1000000;
957 printf("InitializePaletteList NOT DONE elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
968 struct timeval first, second, lapsed;
971 gettimeofday(&first, &tzp);
974 /* initialize pixels to the right color */
975 AllocatePaletteCells((Widget)shell);
978 gettimeofday(&second, &tzp);
979 if(first.tv_usec > second.tv_usec){
980 second.tv_usec += 1000000;
983 printf("AllocatePaletteCells elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
986 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewBottomColor, shell);
996 struct timeval first, second, lapsed;
999 gettimeofday(&first, &tzp);
1002 /* Create the bottom portion of the color dialog */
1003 CreateBottomColor();
1006 gettimeofday(&second, &tzp);
1007 if(first.tv_usec > second.tv_usec){
1008 second.tv_usec += 1000000;
1011 printf("CreateBottomColor elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
1014 XtAppAddWorkProc(XtWidgetToApplicationContext((Widget) shell), NewCreateButtons, shell);
1024 struct timeval first, second, lapsed;
1025 struct timezone tzp;
1027 gettimeofday(&first, &tzp);
1030 /* initialize pixels to the right color */
1031 CreatePaletteButtons(style.buttonsForm);
1034 gettimeofday(&second, &tzp);
1035 if(first.tv_usec > second.tv_usec){
1036 second.tv_usec += 1000000;
1039 printf("CreatePaletteButtons elapsed time is %ld seconds, %ld microseconds\n", second.tv_sec - first.tv_sec, second.tv_usec - first.tv_usec);
1045 /*************************************<->*************************************
1052 * When a SIGCHLD signal comes in, wait for all child processes to die.
1065 *************************************<->***********************************/
1067 WaitChildDeath( void )
1072 pid = wait(&stat_loc);
1073 signal(SIGCHLD,(void (*)())WaitChildDeath);