]> Dogcows Code - chaz/openbox/commitdiff
grab the pointer when windows move them selves so no enter events happen. i wonder...
authorDana Jansens <danakj@orodu.net>
Thu, 17 May 2007 01:38:01 +0000 (01:38 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 17 May 2007 01:38:01 +0000 (01:38 +0000)
little cleanup in client.c, and remove client_configure macro which was now
redundant

openbox/client.c
openbox/client.h
openbox/event.c
openbox/moveresize.c

index cfe2958be32b916021d987efc08b58e6dd27fcad..57d392495c91b2ce3ccae44a66e8332ed7b4fc53 100644 (file)
@@ -1771,8 +1771,8 @@ void client_reconfigure(ObClient *self)
     /* by making this pass FALSE for user, we avoid the emacs event storm where
        every configurenotify causes an update in its normal hints, i think this
        is generally what we want anyways... */
-    client_configure(self, self->area.x, self->area.y,
-                     self->area.width, self->area.height, FALSE, TRUE);
+    client_configure_full(self, self->area.x, self->area.y,
+                          self->area.width, self->area.height, FALSE, TRUE);
 }
 
 void client_update_wmhints(ObClient *self)
@@ -2710,6 +2710,7 @@ void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h,
     gint oldw, oldh;
     gboolean send_resize_client;
     gboolean moved = FALSE, resized = FALSE;
+    gboolean fmoved, fresized;
     guint fdecor = self->frame->decorations;
     gboolean fhorz = self->frame->max_horz;
     gint logicalw, logicalh;
@@ -2745,10 +2746,12 @@ void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h,
     }
 
     /* find the frame's dimensions and move/resize it */
+    fmoved = moved;
+    fresized = resized;
     if (self->decorations != fdecor || self->max_horz != fhorz)
-        moved = resized = TRUE;
-    if (moved || resized)
-        frame_adjust_area(self->frame, moved, resized, FALSE);
+        fmoved = fresized = TRUE;
+    if (fmoved || fresized)
+        frame_adjust_area(self->frame, fmoved, fresized, FALSE);
 
     if ((!user || (user && final)) && !resized)
     {
@@ -3304,19 +3307,26 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2)
         client_calc_layer(self);
     }
 
-    /* These things below can change focus so we can't grab pointer for them */
-    ungrab_pointer();
-
     if (modal != self->modal) {
         self->modal = modal;
         /* when a window changes modality, then its stacking order with its
            transients needs to change */
         stacking_raise(CLIENT_AS_WINDOW(self));
+
+        /* These things below can change focus so we can't grab pointer for
+           them. Note how we have two ungrab_pointers.. */
+        ungrab_pointer();
+
         /* it also may get focused. if something is focused that shouldn't
            be focused anymore, then move the focus */
         if (focus_client && client_focus_target(focus_client) != focus_client)
             client_focus(focus_client);
     }
+    else
+        /* These things below can change focus so we can't grab pointer for
+           them. Note how we have two ungrab_pointers.. */
+        ungrab_pointer();
+
     if (iconic != self->iconic)
         client_iconify(self, iconic, FALSE, FALSE);
 
@@ -3576,13 +3586,6 @@ void client_set_undecorated(ObClient *self, gboolean undecorated)
     if (self->undecorated != undecorated) {
         self->undecorated = undecorated;
         client_setup_decor_and_functions(self);
-        /* Make sure the client knows it might have moved. Maybe there is a
-         * better way of doing this so only one client_configure is sent, but
-         * since 125 of these are sent per second when moving the window (with
-         * user = FALSE) i doubt it matters much.
-         */
-        client_configure(self, self->area.x, self->area.y,
-                         self->area.width, self->area.height, TRUE, TRUE);
         client_change_state(self); /* reflect this in the state hints */
     }
 }
index 0f584a7733d2f7e49cffc601cd4977c42adba0e7..3dcf62fc3a8952bf0f5d6762eceb98827611e5af 100644 (file)
@@ -369,15 +369,12 @@ void client_convert_gravity(ObClient *self, gint gravity, gint *x, gint *y,
                             gint w, gint h);
 
 #define client_move(self, x, y) \
-  client_configure(self, x, y, self->area.width, self->area.height, \
-                   TRUE, TRUE)
+  client_configure_full(self, x, y, self->area.width, self->area.height, \
+                        TRUE, TRUE)
 #define client_resize(self, w, h) \
-  client_configure(self, self->area.x, self->area.y, w, h, TRUE, TRUE)
+  client_configure_full(self, self->area.x, self->area.y, w, h, TRUE, TRUE)
 #define client_move_resize(self, x, y, w, h) \
-  client_configure(self, x, y, w, h, TRUE, TRUE)
-
-#define client_configure(self, x, y, w, h, user, final) \
-  client_configure_full(self, x, y, w, h, user, final)
+  client_configure_full(self, x, y, w, h, TRUE, TRUE)
 
 /*! Figure out where a window will end up and what size it will be if you
   told it to move/resize to these coordinates.
index b1e61f77c839bedcd71b77fdb216de292385623b..15902a6a61a97bd729d36ed03ddd7358dd3edbd1 100644 (file)
@@ -28,6 +28,7 @@
 #include "config.h"
 #include "screen.h"
 #include "frame.h"
+#include "grab.h"
 #include "menu.h"
 #include "menuframe.h"
 #include "keyboard.h"
@@ -1081,7 +1082,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
 
         if (config) {
             client_find_onscreen(client, &x, &y, w, h, FALSE);
+
+            /* don't create enter events from clients moving themselves */
+            grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
             client_configure_full(client, x, y, w, h, FALSE, TRUE);
+            ungrab_pointer();
         }
         break;
     }
@@ -1258,7 +1263,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
                      e->xclient.data.l[0] & 1 << 9, y);
             client_convert_gravity(client, grav, &x, &y, w, h);
             client_find_onscreen(client, &x, &y, w, h, FALSE);
-            client_configure(client, x, y, w, h, FALSE, TRUE);
+
+            /* don't create enter events from clients moving themselves */
+            grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
+            client_configure_full(client, x, y, w, h, FALSE, TRUE);
+            ungrab_pointer();
         } else if (msgtype == prop_atoms.net_restack_window) {
             if (e->xclient.data.l[0] != 2) {
                 ob_debug_type(OB_DEBUG_APP_BUGS,
index 837f3e92feec451dd59993944d42fa9f785fc36e..8b31dbfa2847b8851b4339ebe9a0675b7a84f2b2 100644 (file)
@@ -295,9 +295,9 @@ void moveresize_end(gboolean cancel)
 #endif
 
         get_resize_position(&x, &y, cancel);
-        client_configure(moveresize_client, x, y,
-                         (cancel ? start_cw : cur_x),
-                         (cancel ? start_ch : cur_y), TRUE, TRUE);
+        client_configure_full(moveresize_client, x, y,
+                              (cancel ? start_cw : cur_x),
+                              (cancel ? start_ch : cur_y), TRUE, TRUE);
     }
 
     moveresize_in_progress = FALSE;
@@ -314,9 +314,9 @@ static void do_move(gboolean keyboard)
     if (!keyboard) resist = config_resist_edge;
     resist_move_monitors(moveresize_client, resist, &cur_x, &cur_y);
 
-    client_configure(moveresize_client, cur_x, cur_y,
-                     moveresize_client->area.width,
-                     moveresize_client->area.height, TRUE, FALSE);
+    client_configure_full(moveresize_client, cur_x, cur_y,
+                          moveresize_client->area.width,
+                          moveresize_client->area.height, TRUE, FALSE);
     if (config_resize_popup_show == 2) /* == "Always" */
         popup_coords(moveresize_client, "%d x %d",
                      moveresize_client->frame->area.x,
@@ -375,7 +375,8 @@ static void do_resize()
     {
         gint x, y;
         get_resize_position(&x, &y, FALSE);
-        client_configure(moveresize_client, x, y, cur_x, cur_y, TRUE, FALSE);
+        client_configure_full(moveresize_client,
+                              x, y, cur_x, cur_y, TRUE, FALSE);
     }
 
     /* this would be better with a fixed width font ... XXX can do it better
This page took 0.039032 seconds and 4 git commands to generate.