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].