if we get an event on a subwindow of root that we don't know about, but it is related...
authorDana Jansens <danakj@orodu.net>
Fri, 15 Jan 2010 20:07:42 +0000 (15:07 -0500)
committerDana Jansens <danakj@orodu.net>
Fri, 15 Jan 2010 20:14:58 +0000 (15:14 -0500)
openbox/event.c

index 45ae101..51cfc65 100644 (file)
@@ -719,22 +719,27 @@ static void event_process(const XEvent *ec, gpointer data)
 #endif
 
     if (e->type == ButtonPress || e->type == ButtonRelease) {
+        ObWindow *w;
+        static guint pressed = 0;
+        static Window pressed_win = None;
+
         /* If the button press was on some non-root window, or was physically
-           on the root window, then process it */
+           on the root window... */
         if (window != obt_root(ob_screen) ||
-            e->xbutton.subwindow == None)
+            e->xbutton.subwindow == None ||
+            /* ...or if it is related to the last button press we handled... */
+            pressed == e->xbutton.button ||
+            /* ...or it if it was physically on an openbox
+               internal window... */
+            ((w = window_find(e->xbutton.subwindow)) &&
+             WINDOW_IS_INTERNAL(w)))
+            /* ...then process the event, otherwise ignore it */
         {
             used = event_handle_user_input(client, e);
-        }
-        /* Otherwise only process it if it was physically on an openbox
-           internal window */
-        else {
-            ObWindow *w;
 
-            if ((w = window_find(e->xbutton.subwindow)) &&
-                WINDOW_IS_INTERNAL(w))
-            {
-                used = event_handle_user_input(client, e);
+            if (e->type == ButtonPress) {
+                pressed = e->xbutton.button;
+                pressed_win = e->xbutton.subwindow;
             }
         }
     }