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))
!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) */
}
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;
}
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);
- }
-}
-