diff --git a/src/client.c b/src/client.c index 803b3aa5c99d062ba2c969b9a554161304a4b675..838f64caaf06d88b14ccbdcab2745fe3160f3f85 100644 --- a/src/client.c +++ b/src/client.c @@ -1221,12 +1221,19 @@ clientWindowType (Client * c) { Client *c2; - TRACE ("Window is a transient or a modal"); + TRACE ("Window \"%s\" is a transient or a modal", c->name); c2 = clientGetHighestTransientOrModalFor (c); if (c2) { - c->initial_layer = c2->win_layer; + if (clientIsTransient (c)); + { + c->initial_layer = c2->win_layer; + } + else if (c->initial_layer < c2->win_layer) /* clientIsModal (c) */ + { + c->initial_layer = c2->win_layer; + } TRACE ("Applied layer is %i", c->initial_layer); } FLAG_UNSET (c->flags, diff --git a/src/events.c b/src/events.c index 615a31993a5bb916896c0784b5b3169d5cddc320..7825cfe09e43edf6c7cb2e2cb5fea5a09df03d9d 100644 --- a/src/events.c +++ b/src/events.c @@ -1548,7 +1548,7 @@ handleClientMessage (XClientMessageEvent * ev) TRACE ("client \"%s\" (0x%lx) has received a net_active_window event", c->name, c->window); - workspaceSwitch (c->win_workspace, NULL); + clientSetWorkspace (c, workspace, TRUE); clientShow (c, TRUE); clientRaise (c); clientSetFocus (c, FOCUS_SORT);