1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 04:48:06 +01:00

Inotify: Reload keyboard shortcut definitions when configuration changes

Despite having the inotify mechanism compiled in my WM, everytime I
changed a keyboard shortcut definition in the WMRootMenu via WPrefs
I was required to open the WMRootMenu (eg with the F12 key) for the
change to take effect...annoying.

So explicitly reload the key bindings when a modification inside
~/GNUstep/Defaults/ is detected. As the inotify mechanism calls the
function wDefaultsCheckDomains() when that happens, let's add a call
to rebind_key_grabs() in there.

Now it works fine and changes are automatically in effect once WPrefs
writes the menu.

PS: rebindKeygrabs() renamed to rebind_key_grabs()...
This commit is contained in:
Carlos R. Mafra
2012-01-22 16:11:04 +00:00
parent c33455fdb4
commit cbe2f4e61a
3 changed files with 13 additions and 6 deletions

View File

@@ -61,6 +61,7 @@
#include "dock.h" #include "dock.h"
#include "workspace.h" #include "workspace.h"
#include "properties.h" #include "properties.h"
#include "rootmenu.h"
#define MAX_SHORTCUT_LENGTH 32 #define MAX_SHORTCUT_LENGTH 32
@@ -998,6 +999,9 @@ void wDefaultsCheckDomains(void* arg)
} }
WDRootMenu->dictionary = dict; WDRootMenu->dictionary = dict;
wDefaultsMergeGlobalMenus(WDRootMenu); wDefaultsMergeGlobalMenus(WDRootMenu);
scr = wScreenWithNumber(0);
configureMenu(scr, dict, True);
rebind_key_grabs(scr);
} }
} else { } else {
wwarning(_("could not load domain %s from user defaults database"), "WMRootMenu"); wwarning(_("could not load domain %s from user defaults database"), "WMRootMenu");

View File

@@ -50,6 +50,7 @@
#include "framewin.h" #include "framewin.h"
#include "session.h" #include "session.h"
#include "xmodifier.h" #include "xmodifier.h"
#include "rootmenu.h"
#include <WINGs/WUtil.h> #include <WINGs/WUtil.h>
@@ -63,7 +64,6 @@ extern WPreferences wPreferences;
static WMenu *readMenuPipe(WScreen * scr, char **file_name); static WMenu *readMenuPipe(WScreen * scr, char **file_name);
static WMenu *readMenuFile(WScreen * scr, char *file_name); static WMenu *readMenuFile(WScreen * scr, char *file_name);
static WMenu *readMenuDirectory(WScreen * scr, char *title, char **file_name, char *command); static WMenu *readMenuDirectory(WScreen * scr, char *title, char **file_name, char *command);
static WMenu *configureMenu(WScreen * scr, WMPropList * definition, Bool includeGlobals);
typedef struct Shortcut { typedef struct Shortcut {
struct Shortcut *next; struct Shortcut *next;
@@ -379,7 +379,7 @@ void wRootMenuBindShortcuts(Window window)
} }
} }
static void rebindKeygrabs(WScreen * scr) void rebind_key_grabs(WScreen *scr)
{ {
WWindow *wwin; WWindow *wwin;
@@ -1479,7 +1479,7 @@ static WMenu *makeDefaultMenu(WScreen * scr)
* *
*---------------------------------------------------------------------- *----------------------------------------------------------------------
*/ */
static WMenu *configureMenu(WScreen * scr, WMPropList * definition, Bool includeGlobals) WMenu *configureMenu(WScreen *scr, WMPropList *definition, Bool includeGlobals)
{ {
WMenu *menu = NULL; WMenu *menu = NULL;
WMPropList *elem; WMPropList *elem;
@@ -1730,5 +1730,5 @@ void OpenRootMenu(WScreen * scr, int x, int y, int keyboard)
} }
if (scr->flags.root_menu_changed_shortcuts) if (scr->flags.root_menu_changed_shortcuts)
rebindKeygrabs(scr); rebind_key_grabs(scr);
} }

View File

@@ -23,11 +23,11 @@
#define WMROOTMENU_H #define WMROOTMENU_H
#include "WindowMaker.h" #include "WindowMaker.h"
#include "screen.h"
#include "menu.h"
typedef void *WRootMenuData; typedef void *WRootMenuData;
typedef struct _WRootMenuReader { typedef struct _WRootMenuReader {
Bool (*checkMenuChange)(char *path, time_t lastAccessTime); Bool (*checkMenuChange)(char *path, time_t lastAccessTime);
@@ -41,4 +41,7 @@ typedef struct _WRootMenuReader {
void (*closeMenuFile)(WRootMenuData *data); void (*closeMenuFile)(WRootMenuData *data);
} WRootMenuReader; } WRootMenuReader;
void rebind_key_grabs(WScreen *scr);
WMenu *configureMenu(WScreen *scr, WMPropList *definition, Bool includeGlobals);
#endif /* WMROOTMENU_H */ #endif /* WMROOTMENU_H */