[Xfce4-commits] r25655 - xfwm4/trunk/src

Olivier Fourdan olivier at xfce.org
Tue May 1 16:32:52 CEST 2007


Author: olivier
Date: 2007-05-01 14:32:51 +0000 (Tue, 01 May 2007)
New Revision: 25655

Modified:
   xfwm4/trunk/src/events.c
   xfwm4/trunk/src/keyboard.c
   xfwm4/trunk/src/keyboard.h
Log:
Revert to modifier mapping from xfwm4 version 4.0 (Bug #3194)

Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c	2007-04-28 18:59:18 UTC (rev 25654)
+++ xfwm4/trunk/src/events.c	2007-05-01 14:32:51 UTC (rev 25655)
@@ -354,7 +354,7 @@
     {
         screen_info = c->screen_info;
         key = getKeyPressed (screen_info, ev);
-	status = EVENT_FILTER_REMOVE;
+        status = EVENT_FILTER_REMOVE;
 
         switch (key)
         {

Modified: xfwm4/trunk/src/keyboard.c
===================================================================
--- xfwm4/trunk/src/keyboard.c	2007-04-28 18:59:18 UTC (rev 25654)
+++ xfwm4/trunk/src/keyboard.c	2007-05-01 14:32:51 UTC (rev 25655)
@@ -153,47 +153,61 @@
     }
 }
 
-void
+gboolean
 grabKey (Display * dpy, MyKey * key, Window w)
 {
+    gboolean status;
+
     TRACE ("entering grabKey");
 
+    status=GrabSuccess;
     if (key->keycode)
     {
         if (key->modifier == 0)
         {
-            XGrabKey (dpy, key->keycode, AnyModifier, w, FALSE,
-                GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode, AnyModifier, w, FALSE,
+					GrabModeAsync, GrabModeSync);
         }
         else
         {
             /* Here we grab all combinations of well known modifiers */
-            XGrabKey (dpy, key->keycode,
-                key->modifier, w, FALSE,
-                GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | ScrollLockMask, w,
-                FALSE, GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | NumLockMask, w,
-                FALSE, GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | LockMask, w,
-                FALSE, GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | ScrollLockMask | NumLockMask, w, FALSE,
-                GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | ScrollLockMask | LockMask, w, FALSE,
-                GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | LockMask | NumLockMask, w, FALSE,
-                GrabModeAsync, GrabModeSync);
-            XGrabKey (dpy, key->keycode,
-                key->modifier | ScrollLockMask | LockMask | NumLockMask,
-                w, FALSE, GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier, w, FALSE,
+					GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | ScrollLockMask, w,
+					FALSE, GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | NumLockMask, w,
+					FALSE, GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | LockMask, w,
+					FALSE, GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | ScrollLockMask | NumLockMask, w, FALSE,
+					GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | ScrollLockMask | LockMask, w, FALSE,
+					GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | LockMask | NumLockMask, w, FALSE,
+					GrabModeAsync, GrabModeSync);
+            status |= 
+                XGrabKey (dpy, key->keycode,
+					key->modifier | ScrollLockMask | LockMask | NumLockMask,
+					w, FALSE, GrabModeAsync, GrabModeSync);
         }
     }
+
+    return (status == GrabSuccess);
 }
 
 void
@@ -204,53 +218,67 @@
     XUngrabKey (dpy, AnyKey, AnyModifier, w);
 }
 
-void
+gboolean
 grabButton (Display * dpy, int button, int modifier, Window w)
 {
+    gboolean status;
+
     TRACE ("entering grabButton");
 
+    status=GrabSuccess;
     if (modifier == AnyModifier)
     {
-        XGrabButton (dpy, button, AnyModifier, w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
+        status |= 
+            XGrabButton (dpy, button, AnyModifier, w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
     }
     else
     {
         /* Here we grab all combinations of well known modifiers */
-        XGrabButton (dpy, button, modifier,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button, modifier | ScrollLockMask,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button, modifier | NumLockMask,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button, modifier | LockMask, w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button, modifier | ScrollLockMask | NumLockMask,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button, modifier | ScrollLockMask | LockMask,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button, modifier | LockMask | NumLockMask,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
-        XGrabButton (dpy, button,
-            modifier | ScrollLockMask | LockMask | NumLockMask,
-            w, FALSE,
-            ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
-            None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier | ScrollLockMask,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier | NumLockMask,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier | LockMask, w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier | ScrollLockMask | NumLockMask,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier | ScrollLockMask | LockMask,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button, modifier | LockMask | NumLockMask,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
+        status |= 
+            XGrabButton (dpy, button,
+				modifier | ScrollLockMask | LockMask | NumLockMask,
+				w, FALSE,
+				ButtonPressMask|ButtonReleaseMask, GrabModeSync, GrabModeAsync,
+				None, None);
     }
+
+    return (status == GrabSuccess);
 }
 
 void
@@ -281,63 +309,111 @@
 void
 initModifiers (Display * dpy)
 {
-    XModifierKeymap *modmap;
-    KeySym *keymap;
-    unsigned int keycode;
-    int keysyms_per_keycode;
-    int min_keycode;
-    int max_keycode;
-    int i;
+    XModifierKeymap *xmk = XGetModifierMapping (dpy);
+    int m, k;
 
-    AltMask = 0;
-    MetaMask = 0;
-    NumLockMask = 0;
-    ScrollLockMask = 0;
-    SuperMask = 0;
-    HyperMask = 0;
-    keysyms_per_keycode = 0;
-    min_keycode = 0;
-    max_keycode = 0;
+    AltMask = MetaMask = NumLockMask = ScrollLockMask =
+        SuperMask = HyperMask = 0;
+    if (xmk)
+    {
+        KeyCode *c = xmk->modifiermap;
+        KeyCode numLockKeyCode;
+        KeyCode scrollLockKeyCode;
+        KeyCode capsLockKeyCode;
+        KeyCode altKeyCode;
+        KeyCode metaKeyCode;
+        KeyCode superKeyCode;
+        KeyCode hyperKeyCode;
 
-    XDisplayKeycodes (dpy, &min_keycode, &max_keycode);
-    modmap = XGetModifierMapping (dpy);
-    keymap = XGetKeyboardMapping (dpy, min_keycode, max_keycode - min_keycode + 1, &keysyms_per_keycode);
+        numLockKeyCode = XKeysymToKeycode (dpy, XK_Num_Lock);
+        scrollLockKeyCode = XKeysymToKeycode (dpy, XK_Scroll_Lock);
+        capsLockKeyCode = XKeysymToKeycode (dpy, XK_Caps_Lock);
+        altKeyCode = XKeysymToKeycode (dpy, XK_Alt_L);
+        metaKeyCode = XKeysymToKeycode (dpy, XK_Meta_L);
+        superKeyCode = XKeysymToKeycode (dpy, XK_Super_L);
+        hyperKeyCode = XKeysymToKeycode (dpy, XK_Hyper_L);
 
-    for (i = 3 * modmap->max_keypermod; i < 8 * modmap->max_keypermod; i++)
-    {
-        keycode = modmap->modifiermap[i];
-        if ((keycode >= min_keycode) && (keycode <= max_keycode))
+        if (!altKeyCode)
         {
-            int j;
-            KeySym *syms = keymap + (keycode - min_keycode) * keysyms_per_keycode;
+            altKeyCode = XKeysymToKeycode (dpy, XK_Alt_R);
+        }
+        if (!metaKeyCode)
+        {
+            metaKeyCode = XKeysymToKeycode (dpy, XK_Meta_R);
+        }
+        if (!superKeyCode)
+        {
+            superKeyCode = XKeysymToKeycode (dpy, XK_Super_R);
+        }
+        if (!hyperKeyCode)
+        {
+            hyperKeyCode = XKeysymToKeycode (dpy, XK_Hyper_R);
+        }
 
-            for (j = 0; j < keysyms_per_keycode; j++)
+
+        for (m = 0; m < 8; m++)
+        {
+            for (k = 0; k < xmk->max_keypermod; k++, c++)
             {
-                if (syms[j] == XK_Num_Lock)
+                if (*c == NoSymbol)
                 {
-                    NumLockMask |= (1 << ( i / modmap->max_keypermod));
+                    continue;
                 }
-                else if (syms[j] == XK_Scroll_Lock)
+                if (*c == numLockKeyCode)
                 {
-                    ScrollLockMask |= (1 << ( i / modmap->max_keypermod));
+                    NumLockMask = (1 << m);
                 }
-                else if ((syms[j] == XK_Super_L) || (syms[j] == XK_Super_R))
+                if (*c == scrollLockKeyCode)
                 {
-                    SuperMask |= (1 << ( i / modmap->max_keypermod));
+                    ScrollLockMask = (1 << m);
                 }
-                else if ((syms[j] == XK_Hyper_L) || (syms[j] == XK_Hyper_R))
+                if (*c == altKeyCode)
                 {
-                    HyperMask |= (1 << ( i / modmap->max_keypermod));
-                }       
-                else if ((syms[j] == XK_Meta_L) || (syms[j] == XK_Meta_R))
+                    AltMask = (1 << m);
+                }
+                if (*c == metaKeyCode)
                 {
-                    MetaMask |= (1 << ( i / modmap->max_keypermod));
+                    MetaMask = (1 << m);
                 }
-                else if ((syms[j] == XK_Alt_L) || (syms[j] == XK_Alt_R))
+                if (*c == superKeyCode)
                 {
-                    AltMask |= (1 << ( i / modmap->max_keypermod));
+                    SuperMask = (1 << m);
                 }
+                if (*c == hyperKeyCode)
+                {
+                    HyperMask = (1 << m);
+                }
             }
         }
+        XFreeModifiermap (xmk);
     }
+
+    if (MetaMask == AltMask)
+    {
+        MetaMask = 0;
+    }
+
+    if ((AltMask != 0) && (MetaMask == Mod1Mask))
+    {
+        MetaMask = AltMask;
+        AltMask = Mod1Mask;
+    }
+
+    if ((AltMask == 0) && (MetaMask != 0))
+    {
+        if (MetaMask != Mod1Mask)
+        {
+            AltMask = Mod1Mask;
+        }
+        else
+        {
+            AltMask = MetaMask;
+            MetaMask = 0;
+        }
+    }
+
+    if (AltMask == 0)
+    {
+        AltMask = Mod1Mask;
+    }
 }

Modified: xfwm4/trunk/src/keyboard.h
===================================================================
--- xfwm4/trunk/src/keyboard.h	2007-04-28 18:59:18 UTC (rev 25654)
+++ xfwm4/trunk/src/keyboard.h	2007-05-01 14:32:51 UTC (rev 25655)
@@ -46,12 +46,12 @@
 void                     parseKeyString                         (Display *, 
                                                                  MyKey *, 
                                                                  char *);
-void                     grabKey                                (Display *, 
+gboolean                 grabKey                                (Display *, 
                                                                  MyKey *, 
                                                                  Window);
 void                     ungrabKeys                             (Display *, 
                                                                  Window);
-void                     grabButton                             (Display *, 
+gboolean                 grabButton                             (Display *, 
                                                                  int, 
                                                                  int, 
                                                                  Window);



More information about the Xfce4-commits mailing list