X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Ffocus_cycle.c;h=1fef375480d41d7f06f85b2d68334b1700173994;hb=a76ac8205cbfe484a5fee7749daa20ed2b7e8a2b;hp=56a228387c2621e3cc273efcb9fd72671907d199;hpb=2253b5e341e2a20dee5c0c17eae3f5a8baa1b6ac;p=chaz%2Fopenbox diff --git a/openbox/focus_cycle.c b/openbox/focus_cycle.c index 56a22838..1fef3754 100644 --- a/openbox/focus_cycle.c +++ b/openbox/focus_cycle.c @@ -124,7 +124,9 @@ gboolean focus_cycle_target_valid(ObClient *ft, if (dock_windows || desktop_windows) ok = ok && ((dock_windows && ft->type == OB_CLIENT_TYPE_DOCK) || (desktop_windows && ft->type == OB_CLIENT_TYPE_DESKTOP)); - else + /* modal windows are important and can always get focus if they are + 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 && ((client_normal(ft) && !client_helper(ft)) @@ -138,12 +140,13 @@ gboolean focus_cycle_target_valid(ObClient *ft, !focus_target_has_siblings(ft, iconic_windows, all_desktops)))); /* it's not set to skip the taskbar (unless it is a type that would be - expected to set this hint */ + expected to set this hint, or modal) */ ok = ok && ((ft->type == OB_CLIENT_TYPE_DOCK || ft->type == OB_CLIENT_TYPE_DESKTOP || ft->type == OB_CLIENT_TYPE_TOOLBAR || ft->type == OB_CLIENT_TYPE_MENU || ft->type == OB_CLIENT_TYPE_UTILITY) || + ft->modal || !ft->skip_taskbar); /* it's not going to just send fous off somewhere else (modal window) */ @@ -375,8 +378,9 @@ void focus_directional_cycle(ObDirection dir, gboolean dock_windows, } if (focus_cycle_target && dialog) { /* same arguments as focus_target_valid */ - focus_cycle_popup_show(focus_cycle_target, FALSE, FALSE, dock_windows, - desktop_windows); + focus_cycle_popup_single_show(focus_cycle_target, + FALSE, FALSE, dock_windows, + desktop_windows); return; } @@ -388,23 +392,7 @@ done_cycle: focus_cycle_target = NULL; focus_cycle_draw_indicator(NULL); - focus_cycle_popup_hide(); + focus_cycle_popup_single_hide(); return; } - -void focus_order_add_new(ObClient *c) -{ - if (c->iconic) - focus_order_to_top(c); - else { - g_assert(!g_list_find(focus_order, c)); - /* if there are any iconic windows, put this above them in the order, - but if there are not, then put it under the currently focused one */ - if (focus_order && ((ObClient*)focus_order->data)->iconic) - focus_order = g_list_insert(focus_order, c, 0); - else - focus_order = g_list_insert(focus_order, c, 1); - } -} -