]> Dogcows Code - chaz/openbox/blobdiff - openbox/focus.c
when nothing in a menu is selected, still let keybindings work
[chaz/openbox] / openbox / focus.c
index 84bd7b09a02f4de7941046ec1eef0090e489f9d0..873ba0357c75e5115471341bcc718bccebc1d5c4 100644 (file)
@@ -42,10 +42,10 @@ ObClient *focus_cycle_target;
 
 static ObIconPopup *focus_cycle_popup;
 
-static void focus_cycle_destructor(ObClient *c)
+static void focus_cycle_destructor(ObClient *client, gpointer data)
 {
     /* end cycling if the target disappears */
-    if (focus_cycle_target == c)
+    if (focus_cycle_target == client)
         focus_cycle(TRUE, TRUE, TRUE, TRUE, TRUE);
 }
 
@@ -54,7 +54,7 @@ void focus_startup(gboolean reconfig)
     focus_cycle_popup = icon_popup_new(TRUE);
 
     if (!reconfig) {
-        client_add_destructor((GDestroyNotify) focus_cycle_destructor);
+        client_add_destructor(focus_cycle_destructor, NULL);
 
         /* start with nothing focused */
         focus_set_client(NULL);
@@ -68,7 +68,7 @@ void focus_shutdown(gboolean reconfig)
     icon_popup_free(focus_cycle_popup);
 
     if (!reconfig) {
-        client_remove_destructor((GDestroyNotify) focus_cycle_destructor);
+        client_remove_destructor(focus_cycle_destructor);
 
         for (i = 0; i < screen_num_desktops; ++i)
             g_list_free(focus_order[i]);
@@ -183,7 +183,7 @@ void focus_fallback(ObFocusFallbackType type)
         if (old->transient_for) {
             gboolean trans = FALSE;
 
-            if (config_focus_last || !config_focus_follow)
+            if (!config_focus_follow)
                 trans = TRUE;
             else {
                 ObClient *c;
@@ -194,6 +194,8 @@ void focus_fallback(ObFocusFallbackType type)
                     trans = TRUE;
             }
 
+            g_message("trans %d", trans);
+
             /* try for transient relations */
             if (trans) {
                 if (old->transient_for == OB_TRAN_GROUP) {
@@ -213,7 +215,7 @@ void focus_fallback(ObFocusFallbackType type)
         }
     }
 
-    if (!config_focus_last && config_focus_follow)
+    if (config_focus_follow)
         if (focus_under_pointer())
             return;
 
@@ -291,7 +293,7 @@ static gboolean valid_focus_target(ObClient *ft)
        focus an iconic window, but we want to be able to, so we just check
        if the focus flags on the window allow it, and its on the current
        desktop */
-    return (ft == client_focus_target(ft) && client_normal(ft) &&
+    return (!ft->transients && client_normal(ft) &&
             ((ft->can_focus || ft->focus_notify) &&
              !ft->skip_taskbar &&
              (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL)));
This page took 0.022837 seconds and 4 git commands to generate.