X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Ffocus.c;h=94257205196fa039a31eb3b3afa0a990a54406c6;hb=a6aaabe62c3651169dda9a1a34bcec64dad4ee92;hp=c1d5147773aac2366b27f138648885a7f238e35b;hpb=66d6e1120ec4e66433ecec673258856def164070;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index c1d51477..94257205 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -475,12 +475,20 @@ static gboolean valid_focus_target(ObClient *ft, gboolean dock_windows) else ok = (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_TOOLBAR || ft->type == OB_CLIENT_TYPE_MENU || - ft->type == OB_CLIENT_TYPE_UTILITY))); + ft->type == OB_CLIENT_TYPE_UTILITY) && + /* let alt-tab go to these windows when a window in its group + already has focus ... */ + ((focus_client && ft->group == focus_client->group) || + /* ... or if there are no application windows in its group */ + !client_has_application_group_siblings(ft)))); ok = ok && (ft->can_focus || ft->focus_notify); - ok = ok && !ft->skip_pager; + if (!dock_windows && /* use dock windows that skip taskbar too */ + !(ft->type == OB_CLIENT_TYPE_TOOLBAR || /* also, if we actually are */ + ft->type == OB_CLIENT_TYPE_MENU || /* being allowed to target */ + ft->type == OB_CLIENT_TYPE_UTILITY)) /* one of these, don't let */ + ok = ok && !ft->skip_taskbar; /* skip taskbar stop us */ ok = ok && (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL); ok = ok && ft == client_focus_target(ft); return ok; @@ -491,7 +499,7 @@ static gboolean valid_focus_target(ObClient *ft, gboolean dock_windows) for (it = ft->transients; it; it = g_slist_next(it)) { ObClient *c = it->data; - if (c->frame->visible) + if (frame_visible(c->frame)) return FALSE; } return TRUE;