]> Dogcows Code - chaz/openbox/commitdiff
kill enter events without using pointer grabs
authorDana Jansens <danakj@orodu.net>
Thu, 17 May 2007 02:21:22 +0000 (02:21 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 17 May 2007 02:21:22 +0000 (02:21 +0000)
openbox/client.c
openbox/client_menu.c
openbox/event.c
openbox/event.h

index f1cbdc8d13ff024fe72529a1c2ff18992d84a34a..bca2261c6eb393248f202650d4630de8782bf6ab 100644 (file)
@@ -3272,10 +3272,6 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2)
         }
     }
 
-    /* Grab pointer across these, so it is the same as actions. Enter events
-       won't be generated by the windows moving around */
-    grab_pointer(FALSE, FALSE, OB_CURSOR_NONE);
-
     if (max_horz != self->max_horz || max_vert != self->max_vert) {
         if (max_horz != self->max_horz && max_vert != self->max_vert) {
             /* toggling both */
@@ -3313,19 +3309,11 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2)
            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);
index 499bb9128ad8375d8ce414731c3d43fca1cfee3f..310462458d7bea0762bfecccf214bcee96c67807 100644 (file)
@@ -24,6 +24,7 @@
 #include "openbox.h"
 #include "frame.h"
 #include "moveresize.h"
+#include "event.h"
 #include "prop.h"
 #include "gettext.h"
 
@@ -118,15 +119,19 @@ static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f,
         break;
     case CLIENT_RESTORE:
         client_maximize(c, FALSE, 0);
+        event_ignore_queued_enters();
         break;
     case CLIENT_MAXIMIZE:
         client_maximize(c, TRUE, 0);
+        event_ignore_queued_enters();
         break;
     case CLIENT_SHADE:
         client_shade(c, !c->shaded);
+        event_ignore_queued_enters();
         break;
     case CLIENT_DECORATE:
         client_set_undecorated(c, !c->undecorated);
+        event_ignore_queued_enters();
         break;
     case CLIENT_MOVE:
         /* this needs to grab the keyboard so hide the menu */
@@ -212,6 +217,8 @@ static void layer_menu_execute(ObMenuEntry *e, ObMenuFrame *f,
         g_assert_not_reached();
     }
 
+    event_ignore_queued_enters();
+
     /* update the menu cuz stuff can have changed */
     if (f) {
         layer_menu_update(f, NULL);
index 6a5e3540e175d515c34a260bcb1bfee5ce9a1740..7b8793fa8bc0e28aaa0a59e3d3c7bf943a7dc643 100644 (file)
@@ -1082,11 +1082,10 @@ 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(client, x, y, w, h, FALSE, TRUE);
-            ungrab_pointer();
+
+            /* ignore enter events caused by these like ob actions do */
+            event_ignore_queued_enters();
         }
         break;
     }
@@ -1180,6 +1179,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
                      client->window);
             client_set_state(client, e->xclient.data.l[0],
                              e->xclient.data.l[1], e->xclient.data.l[2]);
+
+            /* ignore enter events caused by these like ob actions do */
+            event_ignore_queued_enters();
         } else if (msgtype == prop_atoms.net_close_window) {
             ob_debug("net_close_window for 0x%lx\n", client->window);
             client_close(client);
@@ -1264,10 +1266,10 @@ static void event_handle_client(ObClient *client, XEvent *e)
             client_convert_gravity(client, grav, &x, &y, w, h);
             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(client, x, y, w, h, FALSE, TRUE);
-            ungrab_pointer();
+
+            /* ignore enter events caused by these like ob actions do */
+            event_ignore_queued_enters();
         } else if (msgtype == prop_atoms.net_restack_window) {
             if (e->xclient.data.l[0] != 2) {
                 ob_debug_type(OB_DEBUG_APP_BUGS,
index 08ee0c1ce094cbac678586b8ffa23e16904be341..4fdf292e511e3f41c025d11a0c919bcdc0390c21 100644 (file)
@@ -51,7 +51,4 @@ void event_halt_focus_delay();
   comes at the same time or later than t2. */
 gboolean event_time_after(Time t1, Time t2);
 
-/*! Used with XCheckIfEvent to find a focusin event on a client window */
-Bool event_look_for_focusin_client(Display *d, XEvent *e, XPointer arg);
-
 #endif
This page took 0.032369 seconds and 4 git commands to generate.