X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Ffocus.c;h=873ba0357c75e5115471341bcc718bccebc1d5c4;hb=a1be19e6270bfff7c41d648659e7a629f815eb6f;hp=84bd7b09a02f4de7941046ec1eef0090e489f9d0;hpb=4ae6be577de367a62b7986b9f23c14fed38dcc85;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 84bd7b09..873ba035 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -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)));