This patch includes the function "NumLockMask", that checks if the
Alt Modifier key is "NumLock". Then we can use this function in the
calls to Capture the key sequence and don't use this modifier.
---
 WPrefs.app/KeyboardShortcuts.c | 44 ++++++++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c
index 84da1d0..4c418c6 100644
--- a/WPrefs.app/KeyboardShortcuts.c
+++ b/WPrefs.app/KeyboardShortcuts.c
@@ -262,6 +262,22 @@ static void XConvertCase(register KeySym sym, KeySym * 
lower, KeySym * upper)
 }
 #endif
 
+static int NumLockMask(Display *dpy)
+{
+       int i;
+       XModifierKeymap *map = XGetModifierMapping(dpy);
+       KeyCode numlock_keycode = XKeysymToKeycode(dpy, XK_Num_Lock);
+       if (numlock_keycode == NoSymbol)
+               return 0;
+
+       for (i = 0; i < 8; i++) {
+               if (map->modifiermap[map->max_keypermod * i] == numlock_keycode)
+                       return 1 << i;
+       }
+
+       return 0;
+}
+
 char *capture_shortcut(Display *dpy, Bool *capturing, Bool convert_case)
 {
        XEvent ev;
@@ -297,27 +313,27 @@ char *capture_shortcut(Display *dpy, Bool *capturing, 
Bool convert_case)
 
        buffer[0] = 0;
 
-       if (ev.xkey.state & ControlMask) {
+       if (ev.xkey.state & ControlMask)
                strcat(buffer, "Control+");
-       }
-       if (ev.xkey.state & ShiftMask) {
+
+       if (ev.xkey.state & ShiftMask)
                strcat(buffer, "Shift+");
-       }
-       if (ev.xkey.state & Mod1Mask) {
+
+       if ((ev.xkey.state & Mod1Mask) && !NumLockMask(dpy))
                strcat(buffer, "Mod1+");
-       }
-       if (ev.xkey.state & Mod2Mask) {
+
+       if ((ev.xkey.state & Mod2Mask) && !NumLockMask(dpy))
                strcat(buffer, "Mod2+");
-       }
-       if (ev.xkey.state & Mod3Mask) {
+
+       if ((ev.xkey.state & Mod3Mask) && !NumLockMask(dpy))
                strcat(buffer, "Mod3+");
-       }
-       if (ev.xkey.state & Mod4Mask) {
+
+       if ((ev.xkey.state & Mod4Mask) && !NumLockMask(dpy))
                strcat(buffer, "Mod4+");
-       }
-       if (ev.xkey.state & Mod5Mask) {
+
+       if ((ev.xkey.state & Mod5Mask) && !NumLockMask(dpy))
                strcat(buffer, "Mod5+");
-       }
+
        strcat(buffer, key);
 
        return wstrdup(buffer);
-- 
1.8.4.rc3


-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to