fallback to desktops properly

This commit is contained in:
Dana Jansens 2007-04-23 02:43:14 +00:00
parent a8a93d7d39
commit eb18f502b5

View file

@ -219,8 +219,11 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
#endif #endif
ob_debug_type(OB_DEBUG_FOCUS, "trying omnipresentness\n"); ob_debug_type(OB_DEBUG_FOCUS, "trying omnipresentness\n");
if (allow_refocus && old && old->desktop == DESKTOP_ALL) if (allow_refocus && old && old->desktop == DESKTOP_ALL &&
client_normal(old))
{
return old; return old;
}
ob_debug_type(OB_DEBUG_FOCUS, "trying the focus order\n"); ob_debug_type(OB_DEBUG_FOCUS, "trying the focus order\n");
@ -239,13 +242,15 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
a splashscreen or a desktop window (save the desktop as a a splashscreen or a desktop window (save the desktop as a
backup fallback though) backup fallback though)
*/ */
if (client_can_focus(c) && c->desktop == screen_desktop && if (client_can_focus(c) && !c->iconic)
!c->iconic)
{ {
if (client_normal(c)) { if (c->desktop == screen_desktop && client_normal(c)) {
ob_debug_type(OB_DEBUG_FOCUS, "found in focus order\n"); ob_debug_type(OB_DEBUG_FOCUS, "found in focus order\n");
return it->data; return it->data;
} else if (c->type == OB_CLIENT_TYPE_DESKTOP && !desktop) } else if ((c->desktop == screen_desktop ||
c->desktop == DESKTOP_ALL) &&
c->type == OB_CLIENT_TYPE_DESKTOP &&
desktop == NULL)
desktop = c; desktop = c;
} }
} }
@ -253,6 +258,7 @@ ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
/* as a last resort fallback to the desktop window if there is one. /* as a last resort fallback to the desktop window if there is one.
(if there's more than one, then the one most recently focused.) (if there's more than one, then the one most recently focused.)
*/ */
ob_debug_type(OB_DEBUG_FOCUS, "found desktop: \n", !!desktop);
return desktop; return desktop;
} }