smarter picking valid focus cycle targets

This commit is contained in:
Dana Jansens 2003-09-26 19:04:18 +00:00
parent d5a1b96802
commit 49b848a2bb

View file

@ -179,10 +179,6 @@ void focus_fallback(ObFocusFallbackType type)
*/ */
focus_set_client(NULL); focus_set_client(NULL);
if (!config_focus_last && config_focus_follow)
if (focus_under_pointer())
return;
if (type == OB_FOCUS_FALLBACK_UNFOCUSING && old) { if (type == OB_FOCUS_FALLBACK_UNFOCUSING && old) {
/* try for transient relations */ /* try for transient relations */
if (old->transient_for) { if (old->transient_for) {
@ -201,6 +197,10 @@ void focus_fallback(ObFocusFallbackType type)
} }
} }
if (!config_focus_last && config_focus_follow)
if (focus_under_pointer())
return;
#if 0 #if 0
/* try for group relations */ /* try for group relations */
if (old->group) { if (old->group) {
@ -276,7 +276,7 @@ static gboolean valid_focus_target(ObClient *ft)
focus an iconic window, but we want to be able to, so we just check 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 if the focus flags on the window allow it, and its on the current
desktop */ desktop */
return (ft->transients == NULL && client_normal(ft) && return (ft == client_focus_target(ft) && client_normal(ft) &&
((ft->can_focus || ft->focus_notify) && ((ft->can_focus || ft->focus_notify) &&
!ft->skip_taskbar && !ft->skip_taskbar &&
(ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL))); (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL)));
@ -324,7 +324,6 @@ void focus_cycle(gboolean forward, gboolean linear,
it = it->prev; it = it->prev;
if (it == NULL) it = g_list_last(list); if (it == NULL) it = g_list_last(list);
} }
/*ft = client_focus_target(it->data);*/
ft = it->data; ft = it->data;
if (valid_focus_target(ft)) { if (valid_focus_target(ft)) {
if (ft != focus_cycle_target) { /* prevents flicker */ if (ft != focus_cycle_target) { /* prevents flicker */