X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=94257205196fa039a31eb3b3afa0a990a54406c6;hb=b5e597f1b3a810610fd63f50c55dc5a8b715744e;hp=4c663c3f124eabd30a223489263f1f24b6eb2120;hpb=9f11e2af6b230c168814c362bd1647c481e0330a;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 4c663c3f..94257205 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -304,13 +304,8 @@ static void popup_cycle(ObClient *c, gboolean show) a = screen_physical_area_monitor(0); icon_popup_position(focus_cycle_popup, CenterGravity, a->x + a->width / 2, a->y + a->height / 2); -/* icon_popup_size(focus_cycle_popup, a->height/2, a->height/16); - icon_popup_show(focus_cycle_popup, c->title, - client_icon(c, a->height/16, a->height/16)); -*/ - /* XXX the size and the font extents need to be related on some level - */ - icon_popup_size(focus_cycle_popup, POPUP_WIDTH, POPUP_HEIGHT); + icon_popup_width(focus_cycle_popup, MAX(a->width/3, POPUP_WIDTH)); + icon_popup_height(focus_cycle_popup, POPUP_HEIGHT); /* use the transient's parent's title/icon */ while (p->transient_for && p->transient_for != OB_TRAN_GROUP) @@ -480,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; @@ -496,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;