9e4c4a7
From e20ebeefa42997fe65008b11ef771c71b697273c Mon Sep 17 00:00:00 2001
9e4c4a7
From: Adam Williamson <awilliam@redhat.com>
9e4c4a7
Date: Fri, 20 Oct 2023 22:12:23 -0700
9e4c4a7
Subject: [PATCH] modified 3329
34559e0
9e4c4a7
Signed-off-by: Adam Williamson <awilliam@redhat.com>
34559e0
---
9e4c4a7
 src/compositor/meta-compositor-x11.c |  2 ++
9e4c4a7
 src/core/display.c                   | 34 ----------------------------
9e4c4a7
 src/tests/x11-test.sh                |  3 +++
9e4c4a7
 src/x11/meta-x11-display.c           | 30 +++++++++++++++++++++++-
9e4c4a7
 4 files changed, 34 insertions(+), 35 deletions(-)
34559e0
34559e0
diff --git a/src/compositor/meta-compositor-x11.c b/src/compositor/meta-compositor-x11.c
9e4c4a7
index 1ad3327dd..ce7bc1945 100644
34559e0
--- a/src/compositor/meta-compositor-x11.c
34559e0
+++ b/src/compositor/meta-compositor-x11.c
34559e0
@@ -188,6 +188,8 @@ meta_compositor_x11_manage (MetaCompositor  *compositor,
34559e0
 
34559e0
   compositor_x11->have_x11_sync_object = meta_sync_ring_init (xdisplay);
34559e0
 
34559e0
+  meta_x11_display_redirect_windows (x11_display, display);
34559e0
+
34559e0
   return TRUE;
34559e0
 }
34559e0
 
34559e0
diff --git a/src/core/display.c b/src/core/display.c
9e4c4a7
index 0a191c0fb..b16e50e21 100644
34559e0
--- a/src/core/display.c
34559e0
+++ b/src/core/display.c
34559e0
@@ -930,9 +930,6 @@ meta_display_new (MetaContext  *context,
34559e0
   MetaDisplay *display;
34559e0
   MetaDisplayPrivate *priv;
34559e0
   guint32 timestamp;
34559e0
-#ifdef HAVE_X11_CLIENT
34559e0
-  Window old_active_xwindow = None;
34559e0
-#endif
34559e0
   MetaMonitorManager *monitor_manager;
34559e0
   MetaSettings *settings;
34559e0
   MetaInputCapture *input_capture;
34559e0
@@ -1048,14 +1045,6 @@ meta_display_new (MetaContext  *context,
34559e0
   display->last_focus_time = timestamp;
34559e0
   display->last_user_time = timestamp;
34559e0
 
34559e0
-#ifdef HAVE_X11
34559e0
-  if (!meta_is_wayland_compositor ())
34559e0
-    meta_prop_get_window (display->x11_display,
34559e0
-                          display->x11_display->xroot,
34559e0
-                          display->x11_display->atom__NET_ACTIVE_WINDOW,
34559e0
-                          &old_active_xwindow);
34559e0
-#endif
34559e0
-
34559e0
   if (!meta_compositor_manage (display->compositor, error))
34559e0
     {
34559e0
       g_object_unref (display);
34559e0
@@ -1076,30 +1065,7 @@ meta_display_new (MetaContext  *context,
34559e0
   g_signal_connect (display->gesture_tracker, "state-changed",
34559e0
                     G_CALLBACK (gesture_tracker_state_changed), display);
34559e0
 
34559e0
-  /* We know that if mutter is running as a Wayland compositor,
34559e0
-   * we start out with no windows.
34559e0
-   */
34559e0
-#ifdef HAVE_X11_CLIENT
34559e0
-  if (!meta_is_wayland_compositor ())
34559e0
-    meta_display_manage_all_xwindows (display);
34559e0
-
34559e0
-  if (old_active_xwindow != None)
34559e0
-    {
34559e0
-      MetaWindow *old_active_window;
34559e0
-      old_active_window = meta_x11_display_lookup_x_window (display->x11_display,
34559e0
-                                                            old_active_xwindow);
34559e0
-      if (old_active_window)
34559e0
-        meta_window_focus (old_active_window, timestamp);
34559e0
-      else
34559e0
-        meta_display_unset_input_focus (display, timestamp);
34559e0
-    }
34559e0
-  else
34559e0
-    {
34559e0
-      meta_display_unset_input_focus (display, timestamp);
34559e0
-    }
34559e0
-#else
34559e0
   meta_display_unset_input_focus (display, timestamp);
34559e0
-#endif
34559e0
 
34559e0
   g_signal_connect (stage, "notify::is-grabbed",
34559e0
                     G_CALLBACK (on_is_grabbed_changed), display);
9e4c4a7
diff --git a/src/tests/x11-test.sh b/src/tests/x11-test.sh
9e4c4a7
index 59e460fc3..d95b2460f 100755
9e4c4a7
--- a/src/tests/x11-test.sh
9e4c4a7
+++ b/src/tests/x11-test.sh
9e4c4a7
@@ -34,6 +34,9 @@ echo \# Launched with pid $MUTTER2_PID
9e4c4a7
 MUTTER2_PID=$!
9e4c4a7
 wait $MUTTER1_PID
9e4c4a7
 
9e4c4a7
+echo \# Waiting for the second mutter to finish loading
9e4c4a7
+gdbus wait --session org.gnome.Mutter.IdleMonitor
9e4c4a7
+
9e4c4a7
 sleep 2
9e4c4a7
 
9e4c4a7
 echo \# Terminating clients > /dev/stderr
34559e0
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
9e4c4a7
index 4e98203dd..4ca620410 100644
34559e0
--- a/src/x11/meta-x11-display.c
34559e0
+++ b/src/x11/meta-x11-display.c
9e4c4a7
@@ -300,8 +300,36 @@ static void
34559e0
 on_x11_display_opened (MetaX11Display *x11_display,
34559e0
                        MetaDisplay    *display)
34559e0
 {
34559e0
+  Window old_active_xwindow = None;
34559e0
+
34559e0
+  if (!meta_is_wayland_compositor ())
34559e0
+    {
34559e0
+      meta_prop_get_window (display->x11_display,
34559e0
+                            display->x11_display->xroot,
34559e0
+                            display->x11_display->atom__NET_ACTIVE_WINDOW,
34559e0
+                            &old_active_xwindow);
34559e0
+    }
34559e0
+
9e4c4a7
+  if (meta_is_wayland_compositor ())
9e4c4a7
+    meta_x11_display_redirect_windows (x11_display, display);
9e4c4a7
+
9e4c4a7
+
34559e0
   meta_display_manage_all_xwindows (display);
9e4c4a7
-  meta_x11_display_redirect_windows (x11_display, display);
34559e0
+
34559e0
+  if (old_active_xwindow != None)
34559e0
+    {
34559e0
+      MetaWindow *old_active_window;
34559e0
+
34559e0
+      old_active_window = meta_x11_display_lookup_x_window (x11_display,
34559e0
+                                                            old_active_xwindow);
34559e0
+      if (old_active_window)
34559e0
+        {
34559e0
+          uint32_t timestamp;
34559e0
+
34559e0
+          timestamp = display->x11_display->timestamp;
34559e0
+          meta_window_focus (old_active_window, timestamp);
34559e0
+        }
34559e0
+    }
34559e0
 }
34559e0
 
34559e0
 static void
34559e0
-- 
9e4c4a7
2.41.0
34559e0