From b27b44db7246fbb2111051962a8f67b2ef47d63b Mon Sep 17 00:00:00 2001 From: David Maciejak Date: Tue, 3 Mar 2026 20:45:16 -0500 Subject: [PATCH] wmaker: filter inotify events only to expected config files This patch is checking if the notification wmaker is receiving from the Defaults directory is coming from a proper expected config file. Until now, using vim for example to open any of the files, for example WMRootMenu would reload the configs, even before saving the file. You would see in the logs: warning: Inotify: Reading config files in defaults database. because vim by default is creating a .swp file in that same directory. --- src/event.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/event.c b/src/event.c index d23cbe3f..a541a962 100644 --- a/src/event.c +++ b/src/event.c @@ -357,10 +357,28 @@ static void handle_inotify_events(void) wPreferences.flags.noupdates = 1; } - if ((pevent->mask & IN_MODIFY) && oneShotFlag == 0) { - wwarning(_("Inotify: Reading config files in defaults database.")); - wDefaultsCheckDomains(NULL); - oneShotFlag = 1; + /* Only react when a known config file inside the Defaults directory is affected */ + if (pevent->len > 0) { + char *fname = pevent->name; + const char *allowed[] = { "WMRootMenu", "WMWindowAttributes", + "WindowMaker", "WMState", "WMGLOBAL", NULL }; + int i, matched = 0; + + for (i = 0; allowed[i]; i++) { + if (strcmp(fname, allowed[i]) == 0) { + matched = 1; + break; + } + } + + if (matched) { + /* react to events that indicate a file was created/moved/written */ + if ((pevent->mask & (IN_MODIFY | IN_CLOSE_WRITE | IN_MOVED_TO | IN_CREATE)) && oneShotFlag == 0) { + wwarning(_("Inotify: Reading config files in defaults database.")); + wDefaultsCheckDomains(NULL); + oneShotFlag = 1; + } + } } /* move to next event in the buffer */