diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-04-10 07:21:30 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-04-10 07:21:30 +0000 |
| commit | a5bd2babc813d990df494832feef55c7b0f17195 (patch) | |
| tree | ca7be1831a8f9653a4198e033b0d8ef1b17eaf55 /openbox | |
| parent | 64dac07d07f37ec965ccc0b5bc8c8c789247cff0 (diff) | |
deiconify transient parents when a child is deiconified.
Diffstat (limited to 'openbox')
| -rw-r--r-- | openbox/client.c | 27 |
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"), |
