let you alt-tab to utility windows when focus is already in the group
authorDana Jansens <danakj@orodu.net>
Sat, 5 May 2007 01:37:51 +0000 (01:37 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 5 May 2007 01:37:51 +0000 (01:37 +0000)
openbox/focus.c

index b1e3123..73b0e78 100644 (file)
@@ -475,13 +475,20 @@ static gboolean valid_focus_target(ObClient *ft, gboolean dock_windows)
     else
         ok = (ft->type == OB_CLIENT_TYPE_NORMAL ||
               ft->type == OB_CLIENT_TYPE_DIALOG ||
-              (!client_has_application_group_siblings(ft) &&
-               (ft->type == OB_CLIENT_TYPE_TOOLBAR ||
-                ft->type == OB_CLIENT_TYPE_MENU ||
-                ft->type == OB_CLIENT_TYPE_UTILITY)));
+              (ft->type == OB_CLIENT_TYPE_TOOLBAR ||
+               ft->type == OB_CLIENT_TYPE_MENU ||
+               ft->type == OB_CLIENT_TYPE_UTILITY) &&
+              /* let alt-tab go to these windows when a window in its group
+                 already has focus ... */
+              ((focus_client && ft->group == focus_client->group) ||
+                /* ... or if there are no application windows in its group */
+               !client_has_application_group_siblings(ft)));
     ok = ok && (ft->can_focus || ft->focus_notify);
-    if (!dock_windows) /* use dock windows that skip taskbar too */
-        ok = ok && !ft->skip_taskbar;
+    if (!dock_windows && /* use dock windows that skip taskbar too */
+        !(ft->type == OB_CLIENT_TYPE_TOOLBAR || /* also, if we actually are */
+          ft->type == OB_CLIENT_TYPE_MENU ||    /* being allowed to target */
+          ft->type == OB_CLIENT_TYPE_UTILITY))  /* one of these, don't let */
+        ok = ok && !ft->skip_taskbar;           /*  skip taskbar stop us */
     ok = ok && (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL);
     ok = ok && ft == client_focus_target(ft);
     return ok;