From 5784f11132cb2ee64af23695867aca9f4ebe0b9b Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 3 May 2007 20:57:40 +0000 Subject: [PATCH] add the notion of "application windows" meaning normal or dialog type windows. let you alt-tab to non-application windows when they dont have an application window in their group --- openbox/client.c | 20 ++++++++++++++++++++ openbox/client.h | 7 +++++++ openbox/focus.c | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/openbox/client.c b/openbox/client.c index 34ae4d86..c7859ca6 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -2198,6 +2198,12 @@ gboolean client_normal(ObClient *self) { self->type == OB_CLIENT_TYPE_SPLASH); } +gboolean client_application(ObClient *self) +{ + return (self->type == OB_CLIENT_TYPE_NORMAL || + self->type == OB_CLIENT_TYPE_DIALOG); +} + static void client_apply_startup_state(ObClient *self, gint x, gint y) { gboolean pos = FALSE; /* has the window's position been configured? */ @@ -3633,3 +3639,17 @@ gboolean client_has_group_siblings(ObClient *self) { return self->group && self->group->members->next; } + +gboolean client_has_application_group_siblings(ObClient *self) +{ + GSList *it; + + if (!self->group) return FALSE; + + for (it = self->group->members; it; it = g_slist_next(it)) { + ObClient *c = it->data; + if (c != self && client_application(c)) + return TRUE; + } + return FALSE; +} diff --git a/openbox/client.h b/openbox/client.h index f75d155c..1273a687 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -348,6 +348,11 @@ gboolean client_should_show(ObClient *self); to them in a number of places regarding focus or user interaction. */ gboolean client_normal(ObClient *self); +/*! Returns if the window is one of an application's main windows (normal or + dialog type) rather than an accessory window (utilty, menu, etc) or a + non-normal window */ +gboolean client_application(ObClient *self); + /* Returns if the window is focused */ gboolean client_focused(ObClient *self); @@ -661,4 +666,6 @@ ObClient* client_under_pointer(); gboolean client_has_group_siblings(ObClient *self); +gboolean client_has_application_group_siblings(ObClient *self); + #endif diff --git a/openbox/focus.c b/openbox/focus.c index 8fcb13f9..b1e31236 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -475,7 +475,7 @@ 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) && + (!client_has_application_group_siblings(ft) && (ft->type == OB_CLIENT_TYPE_TOOLBAR || ft->type == OB_CLIENT_TYPE_MENU || ft->type == OB_CLIENT_TYPE_UTILITY))); -- 2.39.2