Blob Blame History Raw
diff -uNr -B -b WindowMaker-0.92.0/src/defaults.c WindowMaker-0.92.0-dnotify2/src/defaults.c
--- WindowMaker-0.92.0/src/defaults.c	2005-04-08 07:59:16.000000000 -0300
+++ WindowMaker-0.92.0-dnotify2/src/defaults.c	2007-06-27 23:26:46.000000000 -0300
@@ -1348,8 +1348,6 @@
     }
 #endif /* !LITE */
 
-    if (!foo)
-        WMAddTimerHandler(DEFAULTS_CHECK_INTERVAL, wDefaultsCheckDomains, foo);
 }
 
 
diff -uNr -B -b WindowMaker-0.92.0/src/event.c WindowMaker-0.92.0-dnotify2/src/event.c
--- WindowMaker-0.92.0/src/event.c	2005-03-12 21:13:55.000000000 -0300
+++ WindowMaker-0.92.0-dnotify2/src/event.c	2007-06-27 23:26:50.000000000 -0300
@@ -319,10 +319,20 @@
 EventLoop()
 {
     XEvent event;
+    extern volatile int filesChanged;
+    extern void wDefaultsCheckDomains();
 
     for(;;) {
         WMNextEvent(dpy, &event);
         WMHandleEvent(&event);
+	    
+	/* If configuration files in defaults database have 
+	 changed we read them. */
+	if (filesChanged){
+		fprintf(stdout,"Rereading config files in defaults database...\n");
+		wDefaultsCheckDomains(NULL);
+		filesChanged = 0;
+	}
     }
 }
 
diff -uNr -B -b WindowMaker-0.92.0/src/main.c WindowMaker-0.92.0-dnotify2/src/main.c
--- WindowMaker-0.92.0/src/main.c	2004-10-24 22:32:51.000000000 -0300
+++ WindowMaker-0.92.0-dnotify2/src/main.c	2007-06-27 23:26:56.000000000 -0300
@@ -19,6 +19,14 @@
  *  USA.
  */
 
+/* The notify code was copied from Documentation/dnotify.txt
+ * in the linux kernel.
+ */
+
+#define _GNU_SOURCE	/* needed to get the defines in glibc 2.2 */
+#include <fcntl.h>	/* this has the needed values defined */
+#include <signal.h>
+
 #include "wconfig.h"
 
 #include <stdio.h>
@@ -62,6 +70,7 @@
 char *ProgName;
 
 unsigned int ValidModMask = 0xff;
+volatile int filesChanged;
 
 /* locale to use. NULL==POSIX or C */
 char *Locale=NULL;
@@ -451,7 +460,6 @@
     puts(_(" --create-stdcmap	create the standard colormap hint in PseudoColor visuals"));
     puts(_(" --visual-id visualid	visual id of visual to use"));
     puts(_(" --static		do not update or save configurations"));
-    puts(_(" --no-polling		do not periodically check for configuration updates"));
 #ifdef DEBUG
     puts(_(" --synchronous		turn on synchronous display mode"));
 #endif
@@ -490,10 +498,32 @@
 }
 
 
+/* This is the handler used to notify if configuration
+ * files have changed.
+ */
+void handler(int sig, siginfo_t *si, void *data)
+{
+	filesChanged = si->si_fd;
+}
+
 static void
 execInitScript()
 {
-    char *file, *paths;
+	char *file, *path, *paths;
+	struct sigaction act;
+	volatile int fd;
+	
+	path = wstrconcat(wusergnusteppath(), "/Defaults");
+		
+	act.sa_sigaction = handler;
+	sigemptyset(&act.sa_mask);
+	act.sa_flags = SA_SIGINFO;
+	sigaction(SIGRTMIN + 1, &act, NULL);
+
+	fd = open(path, O_RDONLY);
+	fcntl(fd, F_SETSIG, SIGRTMIN + 1);
+	fcntl(fd, F_NOTIFY, DN_MODIFY|DN_MULTISHOT);
+	wfree(path);
 
     paths = wstrconcat(wusergnusteppath(), "/Library/WindowMaker");
     paths = wstrappend(paths, ":"DEF_CONFIG_PATHS);
@@ -746,10 +776,6 @@
                            || strcmp(argv[i], "--static")==0) {
 
                     wPreferences.flags.noupdates = 1;
-                } else if (strcmp(argv[i], "-nopolling")==0
-                           || strcmp(argv[i], "--no-polling")==0) {
-
-                    wPreferences.flags.nopolling = 1;
 #ifdef XSMP_ENABLED
                 } else if (strcmp(argv[i], "-clientid")==0
                            || strcmp(argv[i], "-restore")==0) {
diff -uNr -B -b WindowMaker-0.92.0/src/startup.c WindowMaker-0.92.0-dnotify2/src/startup.c
--- WindowMaker-0.92.0/src/startup.c	2005-03-11 22:11:30.000000000 -0300
+++ WindowMaker-0.92.0-dnotify2/src/startup.c	2007-06-27 23:27:10.000000000 -0300
@@ -885,10 +885,6 @@
         Exit(1);
     }
 
-    if (!wPreferences.flags.nopolling && !wPreferences.flags.noupdates) {
-        /* setup defaults file polling */
-        WMAddTimerHandler(3000, wDefaultsCheckDomains, NULL);
-    }
 }
 
 
diff -uNr -B -b WindowMaker-0.92.0/src/wconfig.h.in WindowMaker-0.92.0-dnotify2/src/wconfig.h.in
--- WindowMaker-0.92.0/src/wconfig.h.in	2004-11-11 11:23:38.000000000 -0200
+++ WindowMaker-0.92.0-dnotify2/src/wconfig.h.in	2007-06-27 23:27:17.000000000 -0300
@@ -457,8 +457,6 @@
 #define MAX_WINDOWLIST_WIDTH	160     /* max width of window title in
                                          * window list */
 
-#define DEFAULTS_CHECK_INTERVAL 2000	/* how often wmaker will check for
-                                         * changes in the config files */
 
 /* if your keyboard don't have arrow keys */
 #undef ARROWLESS_KBD
diff -uNr -B -b WindowMaker-0.92.0/src/WindowMaker.h WindowMaker-0.92.0-dnotify2/src/WindowMaker.h
--- WindowMaker-0.92.0/src/WindowMaker.h	2004-10-24 22:48:39.000000000 -0300
+++ WindowMaker-0.92.0-dnotify2/src/WindowMaker.h	2007-06-27 23:27:21.000000000 -0300
@@ -483,7 +483,6 @@
         unsigned int noautolaunch:1;   /* don't autolaunch apps */
         unsigned int norestore:1;      /* don't restore session */
         unsigned int create_stdcmap:1; /* create std colormap */
-        unsigned int nopolling:1;      /* don't poll for defaults changes */
         unsigned int restarting:2;
     } flags;			       /* internal flags */
 } WPreferences;