]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
continue commit 2b80e4e8ef56bb4fba614139601e750344418e5b - remove debug code, and...
[chaz/openbox] / openbox / event.c
index cd5625990e9fa31ea1cac9f4863a6fb97bfe8f64..d2cb7567c63fbb3027da80172265ff4e7641cfba 100644 (file)
@@ -74,6 +74,7 @@ typedef struct
 {
     ObClient *client;
     Time time;
+    gulong serial;
 } ObFocusDelayData;
 
 typedef struct
@@ -246,7 +247,6 @@ static void event_set_curtime(XEvent *e)
         event_last_user_time = CurrentTime;
 
     event_curtime = t;
-    event_curserial = 0;
 }
 
 static void event_hack_mods(XEvent *e)
@@ -705,30 +705,9 @@ static void event_process(const XEvent *ec, gpointer data)
         /* Otherwise only process it if it was physically on an openbox
            internal window */
         else {
-            Window target, parent, root, *children;
-            unsigned int nchildren;
             ObWindow *w;
 
-            /* Find the top level ancestor of the subwindow, besides the
-               root */
-            target = e->xbutton.subwindow;
-            ob_debug("subwindow 0x%x\n", target);
-            while (XQueryTree(ob_display, target, &root, &parent, &children,
-                              &nchildren) != 0)
-            {
-                XFree(children);
-                if (parent == root) {
-                    ob_debug("parent is root\n");
-                    break;
-                }
-                target = parent;
-            }
-            ob_debug("toplevel 0x%x\n", target);
-
-            w = g_hash_table_lookup(window_map, &target);
-            ob_debug("w 0x%x\n", w);
-                
-            if ((w = g_hash_table_lookup(window_map, &target)) &&
+            if ((w = g_hash_table_lookup(window_map, &e->xbutton.subwindow)) &&
                 WINDOW_IS_INTERNAL(w))
             {
                 event_handle_user_input(client, e);
@@ -742,6 +721,7 @@ static void event_process(const XEvent *ec, gpointer data)
     /* if something happens and it's not from an XEvent, then we don't know
        the time */
     event_curtime = CurrentTime;
+    event_curserial = 0;
 }
 
 static void event_handle_root(XEvent *e)
@@ -816,6 +796,7 @@ void event_enter_client(ObClient *client)
             data = g_new(ObFocusDelayData, 1);
             data->client = client;
             data->time = event_curtime;
+            data->serial = event_curserial;
 
             ob_main_loop_timeout_add(ob_main_loop,
                                      config_focus_delay * 1000,
@@ -825,6 +806,7 @@ void event_enter_client(ObClient *client)
             ObFocusDelayData data;
             data.client = client;
             data.time = event_curtime;
+            data.serial = event_curserial;
             focus_delay_func(&data);
         }
     }
@@ -1912,6 +1894,7 @@ static gboolean focus_delay_func(gpointer data)
     if (menu_frame_visible || moveresize_in_progress) return FALSE;
 
     event_curtime = d->time;
+    event_curserial = d->serial;
     if (client_focus(d->client) && config_focus_raise)
         stacking_raise(CLIENT_AS_WINDOW(d->client));
     event_curtime = old;
@@ -1924,7 +1907,7 @@ static void focus_delay_client_dest(ObClient *client, gpointer data)
                                      client, FALSE);
 }
 
-void event_halt_focus_delay(gulong serial)
+void event_halt_focus_delay()
 {
     /* ignore all enter events up till the event which caused this to occur */
     if (event_curserial) event_ignore_enter_range(1, event_curserial);
@@ -1933,7 +1916,6 @@ void event_halt_focus_delay(gulong serial)
 
 gulong event_start_ignore_all_enters(void)
 {
-    /* increment the serial so we don't ignore events we weren't meant to */
     XSync(ob_display, FALSE);
     return LastKnownRequestProcessed(ob_display);
 }
@@ -1959,6 +1941,7 @@ static void event_ignore_enter_range(gulong start, gulong end)
 
 void event_end_ignore_all_enters(gulong start)
 {
+    XSync(ob_display, FALSE);
     event_ignore_enter_range(start, LastKnownRequestProcessed(ob_display));
 }
 
This page took 0.025839 seconds and 4 git commands to generate.