summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-24 19:38:03 +0000
committerDana Jansens <danakj@orodu.net>2007-05-24 19:38:03 +0000
commit689157e8691330704f1071bc1e23238b56a0b565 (patch)
treed62f302dcbca0335a5ac210e843a3d61347167ea /openbox
parente2da966bcb66df8d6a002bfead189aa2623848e0 (diff)
only put a transient for the group onto some other desktop if its whole group is over there
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/openbox/client.c b/openbox/client.c
index d8eb207f..bcd51005 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -1139,15 +1139,27 @@ static void client_get_desktop(ObClient *self)
self->desktop = self->transient_for->desktop;
trdesk = TRUE;
} else {
+ /* if all the group is on one desktop, then open it on the
+ same desktop */
GSList *it;
+ gboolean first = TRUE;
+ guint all = screen_num_desktops; /* not a valid value */
- for (it = self->group->members; it; it = g_slist_next(it))
- if (it->data != self &&
- !((ObClient*)it->data)->transient_for) {
- self->desktop = ((ObClient*)it->data)->desktop;
- trdesk = TRUE;
- break;
+ for (it = self->group->members; it; it = g_slist_next(it)) {
+ ObClient *c = it->data;
+ if (c != self) {
+ if (first) {
+ all = c->desktop;
+ first = FALSE;
+ }
+ else if (all != c->desktop)
+ all = screen_num_desktops; /* make it invalid */
}
+ }
+ if (all != screen_num_desktops) {
+ self->desktop = all;
+ trdesk = TRUE;
+ }
}
}
if (!trdesk) {