From 689157e8691330704f1071bc1e23238b56a0b565 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 24 May 2007 19:38:03 +0000 Subject: [PATCH] only put a transient for the group onto some other desktop if its whole group is over there --- openbox/client.c | 24 ++++++++++++++++++------ 1 file 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) { -- 2.44.0