]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
not passing timestamps sometimes and not others. set event_curtime when client messag...
[chaz/openbox] / openbox / event.c
index 7eef80174ad14a2084c4b60597294ec0c11682bc..effa166a0d5198fab6217bf117e4ae8459e20ee2 100644 (file)
@@ -422,7 +422,7 @@ static void event_process(const XEvent *ec, gpointer data)
             }
         }
 
-#if 0 /* focus debugging stuff */
+#if 1 /* focus debugging stuff */
     if (e->type == FocusIn || e->type == FocusOut) {
         gint mode = e->xfocus.mode;
         gint detail = e->xfocus.detail;
@@ -542,6 +542,7 @@ static void event_handle_root(XEvent *e)
         msgtype = e->xclient.message_type;
         if (msgtype == prop_atoms.net_current_desktop) {
             guint d = e->xclient.data.l[0];
+            event_curtime = e->xclient.data.l[1];
             if (d < screen_num_desktops)
                 screen_set_desktop(d);
         } else if (msgtype == prop_atoms.net_number_of_desktops) {
@@ -655,8 +656,12 @@ static void event_handle_client(ObClient *client, XEvent *e)
     case FocusOut:
         /* Look for the followup FocusIn */
         if (!XCheckIfEvent(ob_display, &ce, look_for_focusin, NULL)) {
-            /* There is no FocusIn, move focus where we can still hear events*/
-            focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS);
+            /* There is no FocusIn, this means focus went to a window that
+               is not being managed. most likely, this went to PointerRoot
+               or None, meaning the window is no longer around so fallback
+               focus, but not to that window */
+            ob_debug("Focus went to a black hole !\n");
+            focus_fallback(FALSE);
         } else if (ce.xany.window == e->xany.window) {
             /* If focus didn't actually move anywhere, there is nothing to do*/
             break;
@@ -667,7 +672,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
             if (ed.ignored) {
                 /* The FocusIn was ignored, this means it was on a window
                    that isn't a client. */
-                focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS);
+                ob_debug("Focus went to an unmanaged window 0x%x !\n",
+                         ce.xfocus.window);
+                focus_fallback(TRUE);
             }
         }
 
@@ -874,6 +881,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
         }
         break;
     case UnmapNotify:
+        ob_debug("UnmapNotify for window 0x%x\n", client->window);
         if (client->ignore_unmaps) {
             client->ignore_unmaps--;
             break;
@@ -881,6 +889,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
         client_unmanage(client);
         break;
     case DestroyNotify:
+        ob_debug("DestroyNotify for window 0x%x\n", client->window);
         client_unmanage(client);
         break;
     case ReparentNotify:
@@ -907,7 +916,7 @@ static void event_handle_client(ObClient *client, XEvent *e)
                                        it can happen now when the window is on
                                        another desktop, but we still don't
                                        want it! */
-        client_activate(client, FALSE, TRUE, CurrentTime);
+        client_activate(client, FALSE, TRUE);
         break;
     case ClientMessage:
         /* validate cuz we query stuff off the client here */
@@ -966,11 +975,11 @@ static void event_handle_client(ObClient *client, XEvent *e)
                      (e->xclient.data.l[0] == 0 ? "unknown" :
                       (e->xclient.data.l[0] == 1 ? "application" :
                        (e->xclient.data.l[0] == 2 ? "user" : "INVALID"))));
-            /* XXX make use of data.l[1] and [2] ! */
+            /* XXX make use of data.l[2] ! */
+            event_curtime = e->xclient.data.l[1];
             client_activate(client, FALSE,
                             (e->xclient.data.l[0] == 0 ||
-                             e->xclient.data.l[0] == 2),
-                            e->xclient.data.l[1]);
+                             e->xclient.data.l[0] == 2));
         } else if (msgtype == prop_atoms.net_wm_moveresize) {
             ob_debug("net_wm_moveresize for 0x%lx direction %d\n",
                      client->window, e->xclient.data.l[2]);
This page took 0.024286 seconds and 4 git commands to generate.