From 743fb1fdd1c633b5d0b84d781cd8c574b79261ea Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Sun, 15 Feb 2004 21:26:13 +0000
Subject: [PATCH] Place (non transients) modals at a normal layer, or on top of
 its parent window if on a upper layer, Restore windows on current workspace
 as default (bug id #0000115 and #0000116)

(Old svn revision: 11579)
---
 src/client.c | 11 +++++++++--
 src/events.c |  2 +-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/client.c b/src/client.c
index 803b3aa5c..838f64caa 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 615a31993..7825cfe09 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);
-- 
GitLab