]> Dogcows Code - chaz/openbox/blobdiff - openbox/focus.c
don't make omnipresent windows lose focus when changing desktops. this is done by...
[chaz/openbox] / openbox / focus.c
index 9a0b2bdc31b466c21ab6c151fbed345c2225ed5c..b056db7e466f3cde9c6b7c7ab4f3db58a011f5ca 100644 (file)
@@ -159,7 +159,7 @@ static ObClient* focus_fallback_target(gboolean allow_refocus,
 }
 
 ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer,
-                         gboolean allow_omnipresent)
+                         gboolean allow_omnipresent, gboolean focus_lost)
 {
     ObClient *new;
     ObClient *old = focus_client;
@@ -167,7 +167,8 @@ ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer,
     /* unfocus any focused clients.. they can be focused by Pointer events
        and such, and then when we try focus them, we won't get a FocusIn
        event at all for them. */
-    focus_nothing();
+    if (focus_lost)
+        focus_nothing();
 
     new = focus_fallback_target(allow_refocus, allow_pointer,
                                 allow_omnipresent, old);
@@ -274,7 +275,7 @@ ObClient *focus_order_find_first(guint desktop)
 static gboolean focus_target_has_siblings(ObClient *ft,
                                           gboolean iconic_windows,
                                           gboolean all_desktops)
-                                                         
+
 {
     GSList *it;
 
@@ -320,7 +321,7 @@ gboolean focus_valid_target(ObClient *ft,
         ok = ok && ((dock_windows && ft->type == OB_CLIENT_TYPE_DOCK) ||
                     (desktop_windows && ft->type == OB_CLIENT_TYPE_DESKTOP));
     /* modal windows are important and can always get focus if they are
-       visible and stuff, so don't change 'ok' based on their type */ 
+       visible and stuff, so don't change 'ok' based on their type */
     else if (!ft->modal)
         /* normal non-helper windows are valid targets */
         ok = ok &&
@@ -332,7 +333,7 @@ gboolean focus_valid_target(ObClient *ft,
                  include helper windows ... */
               ((focus_client && ft->group == focus_client->group &&
                 helper_windows) ||
-               /* ... or if there are no other windows in its group 
+               /* ... or if there are no other windows in its group
                   that can be focused instead */
                !focus_target_has_siblings(ft, iconic_windows, all_desktops))));
 
This page took 0.022567 seconds and 4 git commands to generate.