On Sun, 29 Sep 2013, Carlos R. Mafra escribió:
> 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.
Hi,
I didn't see that code, some things:
1. My X11 knowledge is not too big, perhaps somebody can help with this code
and select between my patch and this code.
2. IMO, the code (the patch I sent) in WPrefs should be always enabled (without
the preprocessor #ifdef)
3. Perhaps the idea is the same, but I don't know how different methods impact
in the wmaker performance.
4. Function wHackedGrabKey is defined and used in the src/ folder (wmaker) and
the patch I sent is defined and used in the WPrefs/ folder (WPrefs). There are
different applications.
Finally, I was testing my patch with some modifiers (Fn, NumLock, CapsLock)
without problems. The modifier Scroll_Lock is detected as a key press, not as
key modifier.
Cheers,
kix
> 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].
--
||// //\\// Rodolfo "kix" Garcia
||\\// //\\ http://www.kix.es/
--
To unsubscribe, send mail to [email protected].