summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-04-10 07:21:30 +0000
committerDana Jansens <danakj@orodu.net>2003-04-10 07:21:30 +0000
commita5bd2babc813d990df494832feef55c7b0f17195 (patch)
treeca7be1831a8f9653a4198e033b0d8ef1b17eaf55 /openbox
parent64dac07d07f37ec965ccc0b5bc8c8c789247cff0 (diff)
deiconify transient parents when a child is deiconified.
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 787f84c2..cf447a88 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -1621,6 +1621,33 @@ void client_fullscreen(Client *self, gboolean fs, gboolean savearea)
void client_iconify(Client *self, gboolean iconic, gboolean curdesk)
{
+ /* move up the transient chain as far as possible first if deiconifying */
+ if (!iconic)
+ while (self->transient_for) {
+ if (self->transient_for != TRAN_GROUP) {
+ if (self->transient_for->iconic == iconic)
+ break;
+ self = self->transient_for;
+ } else {
+ GSList *it;
+
+ /* the check for TRAN_GROUP is to prevent an infinate loop with
+ 2 transients of the same group at the head of the group's
+ members list */
+ for (it = self->group->members; it; it = it->next) {
+ Client *c = it->data;
+
+ if (c != self && c->transient_for->iconic != iconic &&
+ (c->transient_for != TRAN_GROUP ||
+ c->group != self->group)) {
+ self = it->data;
+ break;
+ }
+ }
+ if (it == NULL) break;
+ }
+ }
+
if (self->iconic == iconic) return; /* nothing to do */
g_message("%sconifying window: 0x%lx", (iconic ? "I" : "Uni"),