X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus_cycle.c;h=bd8a08465e95ef47aff9b01df6551441e14f7d37;hb=4c56b2de8d649764755036c1ff8c0618c22fb468;hp=bfbc272315e180ed00edf8f3769b771ef6ea22da;hpb=e215fc0110de170fb69325b0b79b735ad80529fa;p=chaz%2Fopenbox diff --git a/openbox/focus_cycle.c b/openbox/focus_cycle.c index bfbc2723..bd8a0846 100644 --- a/openbox/focus_cycle.c +++ b/openbox/focus_cycle.c @@ -44,10 +44,6 @@ static ObClient *focus_find_directional (ObClient *c, ObDirection dir, gboolean dock_windows, gboolean desktop_windows); -static ObClient *focus_find_directional (ObClient *c, - ObDirection dir, - gboolean dock_windows, - gboolean desktop_windows); void focus_cycle_startup(gboolean reconfig) { @@ -89,7 +85,7 @@ static gboolean focus_target_has_siblings(ObClient *ft, for (it = ft->group->members; it; it = g_slist_next(it)) { ObClient *c = it->data; /* check that it's not a helper window to avoid infinite recursion */ - if (c != ft && !client_helper(c) && + if (c != ft && c->type == OB_CLIENT_TYPE_NORMAL && focus_cycle_target_valid(c, iconic_windows, all_desktops, FALSE, FALSE)) { @@ -131,7 +127,7 @@ gboolean focus_cycle_target_valid(ObClient *ft, ok = ok && ((client_normal(ft) && !client_helper(ft)) || - /* helper windows are valid targets it... */ + /* helper windows are valid targets if... */ (client_helper(ft) && /* ...a window in its group already has focus ... */ ((focus_client && ft->group == focus_client->group) || @@ -346,9 +342,10 @@ static ObClient *focus_find_directional(ObClient *c, ObDirection dir, if (offset > distance) score += 1000000; - if (best_score == -1 || score < best_score) - best_client = cur, - best_score = score; + if (best_score == -1 || score < best_score) { + best_client = cur; + best_score = score; + } } return best_client; @@ -361,13 +358,10 @@ void focus_directional_cycle(ObDirection dir, gboolean dock_windows, static ObClient *first = NULL; ObClient *ft = NULL; - if (!interactive) - return; - if (cancel) { focus_cycle_target = NULL; goto done_cycle; - } else if (done) + } else if (done && interactive) goto done_cycle; if (!focus_order) @@ -399,21 +393,20 @@ void focus_directional_cycle(ObDirection dir, gboolean dock_windows, ft = it->data; } - if (ft) { - if (ft != focus_cycle_target) {/* prevents flicker */ - focus_cycle_target = ft; - focus_cycle_draw_indicator(ft); - } + if (ft && ft != focus_cycle_target) {/* prevents flicker */ + focus_cycle_target = ft; + if (!interactive) + goto done_cycle; + focus_cycle_draw_indicator(ft); } - if (focus_cycle_target && dialog) { + if (focus_cycle_target && dialog) /* same arguments as focus_target_valid */ focus_cycle_popup_single_show(focus_cycle_target, focus_cycle_iconic_windows, focus_cycle_all_desktops, focus_cycle_dock_windows, focus_cycle_desktop_windows); - return; - } + return; done_cycle: if (done && focus_cycle_target)