On Sun, 29 Sep 2013 at 12:02:05 +0200, Rodolfo García Peñas (kix) wrote:
> 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.

Have you seen the NUMLOCK_HACK in src/window.c?

#ifdef NUMLOCK_HACK
                        /* Also grab all modifier combinations possible that 
include,
                         * LockMask, ScrollLockMask and NumLockMask, so that 
keygrabs
                         * work even if the NumLock/ScrollLock key is on.
                         */
                        wHackedGrabKey(key->keycode, key->modifier,
                                       wwin->frame->core->window, True, 
GrabModeAsync, GrabModeAsync);
#endif

Since the purpose seems to be the same I was wondering if something
similar could be done with WPrefs too.

I don't know, I just remembered this part of the code and want to check
whether you noticed it too.


> ---
>  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 [email protected].


-- 
To unsubscribe, send mail to [email protected].

Reply via email to