summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-03 20:57:40 +0000
committerDana Jansens <danakj@orodu.net>2007-05-03 20:57:40 +0000
commit5784f11132cb2ee64af23695867aca9f4ebe0b9b (patch)
treef93bd596e60848e55c31075ef2c04551c6174cb0
parente0e1d4ba7e150b215b55029ddbff3c824b94caf7 (diff)
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
-rw-r--r--openbox/client.c20
-rw-r--r--openbox/client.h7
-rw-r--r--openbox/focus.c2
3 files changed, 28 insertions, 1 deletions
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)));