From: Dana Jansens Date: Mon, 13 Oct 2003 07:57:43 +0000 (+0000) Subject: smarting picking for cycling to windows woth transients X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=b051b3499dc38e083d580fbedef70bdbbc9caa78;p=chaz%2Fopenbox smarting picking for cycling to windows woth transients --- 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,