Re: [PATCH] Ignore NumLock key when Capture keys

2013-09-29 Thread Carlos R. Mafra
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 wmaker-dev-unsubscr...@lists.windowmaker.org.


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


Re: [PATCH] Ignore NumLock key when Capture keys

2013-09-29 Thread Rodolfo García Peñas
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 wmaker-dev-unsubscr...@lists.windowmaker.org.
 
 
 -- 
 To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

-- 
||// //\\// Rodolfo kix Garcia
||\\// //\\ http://www.kix.es/


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


Re: [PATCH] Ignore NumLock key when Capture keys

2013-09-29 Thread Carlos R. Mafra
On Sun, 29 Sep 2013 at 13:01:48 +0200, Rodolfo García Peñas wrote:
 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.

I will apply your patch. WPrefs is independent from src/.


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