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

Olivier Fourdan olivier at xfce.org
Sun Sep 10 08:45:23 UTC 2006


Author: olivier
Date: 2006-09-10 08:45:19 +0000 (Sun, 10 Sep 2006)
New Revision: 23120

Modified:
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/client.h
   xfwm4/trunk/src/events.c
   xfwm4/trunk/src/screen.c
   xfwm4/trunk/src/screen.h
   xfwm4/trunk/src/settings.c
Log:
Grab keys on root instead of each client window, that saves a *lot* of grabs, makes the code simpler and also fix the keyboard shortcuts not working on shaded windows (Bug #2291).

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c	2006-09-09 23:38:34 UTC (rev 23119)
+++ xfwm4/trunk/src/client.c	2006-09-10 08:45:19 UTC (rev 23120)
@@ -238,11 +238,6 @@
     {
         unsigned long configure_flags = 0L;
 
-        if (mask & UPDATE_KEY_GRABS)
-        {
-            clientUngrabKeys (c);
-            clientGrabKeys (c);
-        }
         if (mask & UPDATE_BUTTON_GRABS)
         {
             clientUngrabButtons (c);
@@ -304,87 +299,6 @@
 }
 
 void
-clientGrabKeys (Client * c)
-{
-    ScreenInfo *screen_info;
-
-    g_return_if_fail (c != NULL);
-    TRACE ("entering clientGrabKeys");
-    TRACE ("grabbing keys for client \"%s\" (0x%lx)", c->name, c->window);
-
-    screen_info = c->screen_info;
-
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_ADD_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_CLOSE_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_CYCLE_WINDOWS], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_DEL_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_HIDE_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_LOWER_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MAXIMIZE_HORIZ], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MAXIMIZE_VERT], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MAXIMIZE_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_DOWN], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_LEFT], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_NEXT_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_PREV_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_RIGHT], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_UP], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_1], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_2], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_3], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_4], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_5], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_6], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_7], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_8], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_9], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_10], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_11], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_WORKSPACE_12], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_NEXT_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_PREV_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_RAISE_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_RESIZE_DOWN], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_RESIZE_LEFT], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_RESIZE_RIGHT], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_RESIZE_UP], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_SHADE_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_STICK_WINDOW], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_SHOW_DESKTOP], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_TOGGLE_FULLSCREEN], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_1], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_2], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_3], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_4], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_5], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_6], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_7], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_8], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_9], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_10], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_11], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_WORKSPACE_12], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_UP_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_DOWN_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_LEFT_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_RIGHT_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_UP_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_DOWN_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_LEFT_WORKSPACE], c->window);
-    grabKey (clientGetXDisplay (c), &screen_info->params->keys[KEY_MOVE_RIGHT_WORKSPACE], c->window);
-}
-
-void
-clientUngrabKeys (Client * c)
-{
-    g_return_if_fail (c != NULL);
-    TRACE ("entering clientUngrabKeys");
-    TRACE ("ungrabing keys for client \"%s\" (0x%lx)", c->name, c->window);
-
-    ungrabKeys (clientGetXDisplay (c), c->window);
-}
-
-void
 clientGrabButtons (Client * c)
 {
     ScreenInfo *screen_info;
@@ -396,7 +310,7 @@
     screen_info = c->screen_info;
     if (screen_info->params->easy_click)
     {
-	grabButton(clientGetXDisplay (c), AnyButton, screen_info->params->easy_click, c->window);
+        grabButton(clientGetXDisplay (c), AnyButton, screen_info->params->easy_click, c->window);
     }
 }
 
@@ -1789,7 +1703,6 @@
 
     clientAddToList (c);
     clientSetNetActions (c);
-    clientGrabKeys (c);
     clientGrabButtons(c);
 
     /* Initialize per client menu button pixmap */
@@ -1918,7 +1831,6 @@
 
     myDisplayGrabServer (display_info);
     gdk_error_trap_push ();
-    clientUngrabKeys (c);
     clientUngrabButtons (c);
     XUnmapWindow (display_info->dpy, c->frame);
     clientGravitate (c, REMOVE);
@@ -4405,7 +4317,7 @@
     {
         return EVENT_FILTER_CONTINUE;
         /*  will never be executed */
-	/* gtk_main_quit (); */
+        /* gtk_main_quit (); */
     }
 
     c = passdata->c;

Modified: xfwm4/trunk/src/client.h
===================================================================
--- xfwm4/trunk/src/client.h	2006-09-09 23:38:34 UTC (rev 23119)
+++ xfwm4/trunk/src/client.h	2006-09-10 08:45:19 UTC (rev 23120)
@@ -68,14 +68,12 @@
 #define INCLUDE_SKIP_TASKBAR            (1<<5)
 
 #define NO_UPDATE_FLAG                  0
-#define UPDATE_KEY_GRABS                (1<<0)
-#define UPDATE_BUTTON_GRABS             (1<<1)
-#define UPDATE_FRAME                    (1<<2)
-#define UPDATE_GRAVITY                  (1<<3)
-#define UPDATE_MAXIMIZE                 (1<<4)
-#define UPDATE_CACHE                    (1<<5)
-#define UPDATE_ALL                      (UPDATE_KEY_GRABS | \
-                                         UPDATE_BUTTON_GRABS | \
+#define UPDATE_BUTTON_GRABS             (1<<0)
+#define UPDATE_FRAME                    (1<<1)
+#define UPDATE_GRAVITY                  (1<<2)
+#define UPDATE_MAXIMIZE                 (1<<3)
+#define UPDATE_CACHE                    (1<<4)
+#define UPDATE_ALL                      (UPDATE_BUTTON_GRABS | \
                                          UPDATE_FRAME | \
                                          UPDATE_GRAVITY | \
                                          UPDATE_MAXIMIZE | \
@@ -163,9 +161,9 @@
                                          WINDOW_DOCK)
 
 /* Which bits of opacity are applied */
-#define OPACITY_MOVE			(1<<0)
-#define OPACITY_RESIZE			(1<<1)
-#define OPACITY_INACTIVE		(1<<2)
+#define OPACITY_MOVE                    (1<<0)
+#define OPACITY_RESIZE                  (1<<1)
+#define OPACITY_INACTIVE                (1<<2)
 
 /* Convenient macros */
 #define FLAG_TEST(flag,bits)                   (flag & (bits))
@@ -298,8 +296,6 @@
 void     clientInstallColormaps (Client *);
 void     clientUpdateColormaps (Client *);
 void     clientUpdateAllFrames (ScreenInfo *, gboolean);
-void     clientGrabKeys (Client *);
-void     clientUngrabKeys (Client *);
 void     clientGrabButtons (Client *);
 void     clientUngrabButtons (Client *);
 Client  *clientGetFromWindow (ScreenInfo *, Window, int);

Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c	2006-09-09 23:38:34 UTC (rev 23119)
+++ xfwm4/trunk/src/events.c	2006-09-10 08:45:19 UTC (rev 23120)
@@ -2146,7 +2146,7 @@
             loadSettings (screen_info);
 
             /* ...then update all frames grabs... */
-            clientUpdateAllFrames (screen_info, UPDATE_BUTTON_GRABS | UPDATE_KEY_GRABS);
+            clientUpdateAllFrames (screen_info, UPDATE_BUTTON_GRABS);
 
             /* ...and regrab the keys we have on the root win... */
             myScreenGrabKeys (screen_info);

Modified: xfwm4/trunk/src/screen.c
===================================================================
--- xfwm4/trunk/src/screen.c	2006-09-09 23:38:34 UTC (rev 23119)
+++ xfwm4/trunk/src/screen.c	2006-09-10 08:45:19 UTC (rev 23120)
@@ -394,14 +394,57 @@
 {
     Display *dpy;
 
+    TRACE ("entering myScreenUnrabKeys");
+    g_return_if_fail (screen_info != NULL);
+
     dpy = myScreenGetXDisplay (screen_info);
 
-    ungrabKeys (dpy, screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_ADD_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_CLOSE_WINDOW], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_CYCLE_WINDOWS], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_DEL_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_DOWN_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_HIDE_WINDOW], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_LEFT_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_LOWER_WINDOW], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MAXIMIZE_HORIZ], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MAXIMIZE_VERT], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MAXIMIZE_WINDOW], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_DOWN], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_DOWN_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_LEFT], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_LEFT_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_NEXT_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_PREV_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_RIGHT], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_RIGHT_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_UP], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_UP_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_1], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_2], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_3], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_4], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_5], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_6], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_7], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_8], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_9], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_10], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_11], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_MOVE_WORKSPACE_12], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_NEXT_WORKSPACE], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_PREV_WORKSPACE], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_ADD_WORKSPACE], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_DEL_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_RAISE_WINDOW], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_RESIZE_DOWN], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_RESIZE_LEFT], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_RESIZE_RIGHT], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_RESIZE_UP], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_RIGHT_WORKSPACE], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_SHADE_WINDOW], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_SHOW_DESKTOP], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_STICK_WINDOW], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_TOGGLE_FULLSCREEN], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_UP_WORKSPACE], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_1], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_2], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_3], screen_info->xroot);
@@ -411,10 +454,20 @@
     grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_7], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_8], screen_info->xroot);
     grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_9], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_UP_WORKSPACE], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_DOWN_WORKSPACE], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_LEFT_WORKSPACE], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_RIGHT_WORKSPACE], screen_info->xroot);
-    grabKey (dpy, &screen_info->params->keys[KEY_SHOW_DESKTOP], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_10], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_11], screen_info->xroot);
+    grabKey (dpy, &screen_info->params->keys[KEY_WORKSPACE_12], screen_info->xroot);
 }
 
+void
+myScreenUngrabKeys (ScreenInfo *screen_info)
+{
+    Display *dpy;
+
+    TRACE ("entering myScreenUnrabKeys");
+    g_return_if_fail (screen_info != NULL);
+
+    dpy = myScreenGetXDisplay (screen_info);
+    ungrabKeys (dpy, screen_info->xroot);
+}
+

Modified: xfwm4/trunk/src/screen.h
===================================================================
--- xfwm4/trunk/src/screen.h	2006-09-09 23:38:34 UTC (rev 23119)
+++ xfwm4/trunk/src/screen.h	2006-09-10 08:45:19 UTC (rev 23120)
@@ -171,4 +171,5 @@
 unsigned int     myScreenUngrabPointer  (ScreenInfo *, 
                                          Time);
 void             myScreenGrabKeys       (ScreenInfo *);
+void             myScreenUngrabKeys     (ScreenInfo *);
 #endif /* INC_SCREEN_H */

Modified: xfwm4/trunk/src/settings.c
===================================================================
--- xfwm4/trunk/src/settings.c	2006-09-09 23:38:34 UTC (rev 23119)
+++ xfwm4/trunk/src/settings.c	2006-09-10 08:45:19 UTC (rev 23120)
@@ -337,7 +337,7 @@
                 {
                     if (!strcmp (name, "Xfwm/KeyThemeName"))
                     {
-                        reloadScreenSettings (screen_info, UPDATE_KEY_GRABS);
+                        reloadScreenSettings (screen_info, NO_UPDATE_FLAG);
                     }
                 }
                 break;
@@ -1255,6 +1255,7 @@
     parseKeyString (dpy, &screen_info->params->keys[KEY_WORKSPACE_11], getValue ("workspace_11_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_WORKSPACE_12], getValue ("workspace_12_key", rc));
 
+    myScreenUngrabKeys (screen_info);
     myScreenGrabKeys (screen_info);
 
     return TRUE;



More information about the Xfce4-commits mailing list