From b051b3499dc38e083d580fbedef70bdbbc9caa78 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 13 Oct 2003 07:57:43 +0000 Subject: [PATCH] smarting picking for cycling to windows woth transients --- openbox/focus.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/openbox/focus.c b/openbox/focus.c index 947c05be..04d4d31a 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -504,16 +504,28 @@ static gboolean valid_focus_target(ObClient *ft) 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 desktop */ - return ((ft->type == OB_CLIENT_TYPE_NORMAL || - ft->type == OB_CLIENT_TYPE_DIALOG || - (!client_has_group_siblings(ft) && - (ft->type == OB_CLIENT_TYPE_TOOLBAR || - ft->type == OB_CLIENT_TYPE_MENU || - ft->type == OB_CLIENT_TYPE_UTILITY))) && - !ft->transients && - ((ft->can_focus || ft->focus_notify) && - !ft->skip_taskbar && - (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL))); + if ((ft->type == OB_CLIENT_TYPE_NORMAL || + ft->type == OB_CLIENT_TYPE_DIALOG || + (!client_has_group_siblings(ft) && + (ft->type == OB_CLIENT_TYPE_TOOLBAR || + ft->type == OB_CLIENT_TYPE_MENU || + ft->type == OB_CLIENT_TYPE_UTILITY))) && + ((ft->can_focus || ft->focus_notify) && + !ft->skip_taskbar && + (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL))) + { + GSList *it; + + for (it = ft->transients; it; it = g_slist_next(it)) { + ObClient *c = it->data; + + if (c->frame->visible) + return FALSE; + } + return TRUE; + } + + return FALSE; } void focus_cycle(gboolean forward, gboolean linear, -- 2.39.2