--- ./src/WindowMaker.h.orig-nopolling Thu Nov 16 21:10:32 2000 +++ ./src/WindowMaker.h Fri Jan 12 00:59:24 2001 @@ -233,6 +233,9 @@ #define WSTATE_EXITING 3 #define WSTATE_RESTARTING 4 #define WSTATE_MODAL 5 +#ifdef ENABLE_NO_POLLING +#define WSTATE_NEED_REREAD 6 +#endif #define WCHECK_STATE(state) (state == WProgramState) @@ -438,6 +441,9 @@ unsigned int noautolaunch:1; /* don't autolaunch apps */ unsigned int norestore:1; /* don't restore session */ unsigned int create_stdcmap:1; /* create std colormap */ +#ifdef ENABLE_NO_POLLING + unsigned int nopolling:1; /* don't poll for changed defaults */ +#endif } flags; /* internal flags */ } WPreferences; --- ./src/main.c.orig-nopolling Fri Jan 5 21:33:34 2001 +++ ./src/main.c Fri Jan 12 01:00:28 2001 @@ -643,6 +643,17 @@ || strcmp(argv[i], "--static")==0) { wPreferences.flags.noupdates = 1; +#ifdef ENABLE_NO_POLLING + wPreferences.flags.nopolling = 1; +#endif + } else if (strcmp(argv[i], "-nopolling")==0 + || strcmp(argv[i], "--no-polling")==0) { + +#ifdef ENABLE_NO_POLLING + wPreferences.flags.nopolling = 1; +#else + wwarning(_("%s option not implemented"), argv[i]); +#endif #ifdef XSMP_ENABLED } else if (strcmp(argv[i], "-clientid")==0 || strcmp(argv[i], "-restore")==0) { --- ./src/startup.c.orig-nopolling Wed Nov 29 00:15:59 2000 +++ ./src/startup.c Fri Jan 12 01:02:20 2001 @@ -278,6 +278,24 @@ WMAddIdleHandler(delayedAction, NULL); } return; +#ifdef ENABLE_NO_POLLING + } else if (sig == SIGUSR2) { +#ifdef SYS_SIGLIST_DECLARED + wwarning(_("got signal %i (%s) - rereading defaults\n"), sig, sys_siglist[sig]); +#else + wwarning(_("got signal %i - rereading defaults\n"), sig); +#endif + + WCHANGE_STATE(WSTATE_NEED_REREAD); + /* setup idle handler, so that this will be handled when + * the select() is returned becaused of the signal, even if + * there are no X events in the queue */ + if (!WDelayedActionSet) { + WDelayedActionSet = 1; + WMAddIdleHandler(delayedAction, NULL); + } + return; +#endif /* ENABLE_NO_POLLING */ } else if (sig == SIGTERM || sig == SIGHUP) { #ifdef SYS_SIGLIST_DECLARED wwarning(_("got signal %i (%s) - exiting...\n"), sig, sys_siglist[sig]); @@ -796,6 +814,9 @@ * -Dan */ sig_action.sa_flags = SA_RESTART; sigaction(SIGUSR1, &sig_action, NULL); +#ifdef ENABLE_NO_POLLING + sigaction(SIGUSR2, &sig_action, NULL); +#endif /* ignore dead pipe */ sig_action.sa_handler = ignoreSig; @@ -955,7 +976,11 @@ Exit(1); } +#ifdef ENABLE_NO_POLLING + if (!wPreferences.flags.nopolling) { +#else if (!wPreferences.flags.noupdates) { +#endif /* setup defaults file polling */ WMAddTimerHandler(3000, wDefaultsCheckDomains, NULL); } --- ./src/event.c.orig-nopolling Fri Jan 12 00:23:32 2001 +++ ./src/event.c Fri Jan 12 01:03:13 2001 @@ -219,6 +219,11 @@ Shutdown(WSRestartPreparationMode); /* received SIGHUP */ Restart(NULL, True); +#ifdef ENABLE_NO_POLLING + } else if (WCHECK_STATE(WSTATE_NEED_REREAD)) { + WCHANGE_STATE(WSTATE_NORMAL); + wDefaultsCheckDomains("bla"); +#endif } /* for the case that all that is wanted to be dispatched is --- ./src/wconfig.h.in.orig-nopolling Fri Jan 12 00:56:12 2001 +++ ./src/wconfig.h.in Fri Jan 12 01:04:12 2001 @@ -181,8 +181,14 @@ #define SILLYNESS - - +/* + * Define if you want the "--no-polling" command-line option enabled. + * This option tells Window Maker not to poll for changes in the + * defaults databases and enables an explicit reread on SIGUSR2. + * Useful for laptop or mobile environments where disks should be + * allowed to spin down. + */ +#define ENABLE_NO_POLLING /* *..........................................................................