]> Dogcows Code - chaz/openbox/blobdiff - openbox/focus.c
better synthetic configurenotify handling. in particular..
[chaz/openbox] / openbox / focus.c
index 07ac963c3a4fc5ee41488e3e68e0b17fd8cd8478..1e343dfa21980e4ea4573acae32086e32c18e351 100644 (file)
@@ -59,7 +59,7 @@ static void focus_cycle_destructor(ObClient *client, gpointer data)
        be used
     */
     if (focus_cycle_target == client)
-        focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, CurrentTime);
+        focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
 }
 
 static Window createWindow(Window parent, gulong mask,
@@ -180,7 +180,7 @@ void focus_set_client(ObClient *client)
        be used.
     */
     if (focus_cycle_target)
-        focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, CurrentTime);
+        focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
 
     old = focus_client;
     focus_client = client;
@@ -212,8 +212,7 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
     {
         if ((target = client_under_pointer()))
             if (allow_refocus || target != old)
-                if (client_normal(target) && client_can_focus(target) &&
-                    client_validate(target)) {
+                if (client_normal(target) && client_can_focus(target)) {
                     ob_debug("found in pointer stuff\n");
                     return target;
                 }
@@ -233,6 +232,11 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
         }
 #endif
 
+    ob_debug("trying omnipresentness\n");
+    if (allow_refocus && old && old->desktop == DESKTOP_ALL)
+        return old;
+
+
     ob_debug("trying  the focus order\n");
     for (it = focus_order; it; it = g_list_next(it))
         if (allow_refocus || it->data != old) {
@@ -249,8 +253,8 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
                a splashscreen or a desktop window (save the desktop as a
                backup fallback though)
             */
-            if (client_can_focus(c) && client_validate(c) &&
-                c->desktop == screen_desktop && !c->iconic)
+            if (client_can_focus(c) && c->desktop == screen_desktop &&
+                !c->iconic)
             {
                 if (client_normal(c)) {
                     ob_debug("found in focus order\n");
@@ -261,7 +265,7 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
         }
 
     /* as a last resort fallback to the desktop window if there is one.
-       (if there's more than one, then the one last focused.)
+       (if there's more than one, then the one most recently focused.)
     */
     return desktop;   
 }
@@ -492,7 +496,7 @@ static gboolean valid_focus_target(ObClient *ft)
 }
 
 void focus_cycle(gboolean forward, gboolean linear, gboolean interactive,
-                 gboolean dialog, gboolean done, gboolean cancel, Time time)
+                 gboolean dialog, gboolean done, gboolean cancel)
 {
     static ObClient *first = NULL;
     static ObClient *t = NULL;
@@ -553,7 +557,7 @@ void focus_cycle(gboolean forward, gboolean linear, gboolean interactive,
 
 done_cycle:
     if (done && focus_cycle_target)
-        client_activate(focus_cycle_target, FALSE, TRUE, time);
+        client_activate(focus_cycle_target, FALSE, TRUE);
 
     t = NULL;
     first = NULL;
@@ -570,8 +574,7 @@ done_cycle:
 }
 
 void focus_directional_cycle(ObDirection dir, gboolean interactive,
-                             gboolean dialog, gboolean done, gboolean cancel,
-                             Time time)
+                             gboolean dialog, gboolean done, gboolean cancel)
 {
     static ObClient *first = NULL;
     ObClient *ft = NULL;
@@ -616,7 +619,7 @@ void focus_directional_cycle(ObDirection dir, gboolean interactive,
 
 done_cycle:
     if (done && focus_cycle_target)
-        client_activate(focus_cycle_target, FALSE, TRUE, time);
+        client_activate(focus_cycle_target, FALSE, TRUE);
 
     first = NULL;
     focus_cycle_target = NULL;
This page took 0.024741 seconds and 4 git commands to generate.