forked from pool/mutter
Dominique Leuenberger
0566de341b
- Update to version 46.3: + Fix performance issues with second virtual monitor + Fix missing unmap animation of some windows + Fix placement/resizing regression + Fix possible out of sync primary selections and clipboard + Fix ibus support in popups + Fix hardware accelerated rendering when headless + Add back support for legacy X11 cursor themes + Fix preedit offsets + Use character offsets to specify surrounding text + Don't force titlebar on screen on all interactive resizes + Fixed crashes + Misc. bug fixes and cleanups + Updated translations. - Rebase patches with quilt. OBS-URL: https://build.opensuse.org/request/show/1184101 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/mutter?expand=0&rev=508
182 lines
6.5 KiB
Diff
182 lines
6.5 KiB
Diff
From b7a1159a1ecd08b5e6aa1279fea84accf846b411 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
|
Date: Fri, 20 Oct 2023 15:44:29 +0800
|
|
Subject: [PATCH 1/4] x11-display: Make subwindow redirection call mode
|
|
specific
|
|
|
|
This means that for X11 sessions we'll do it before any windows are
|
|
mapped, and before any plugin implementation is started. Doing it before
|
|
a plugin is started is important, because things that the plugin does
|
|
during startup can have consequences on how compositing on Xorg works.
|
|
|
|
For the Xwayland case, we'll do it relatively in the setup phase. It
|
|
appears to have been harmless to do it later in the post-opened signal,
|
|
but there is no harm in doing it as one of the earlier steps.
|
|
|
|
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3089
|
|
---
|
|
src/compositor/meta-compositor-x11.c | 2 ++
|
|
src/wayland/meta-xwayland.c | 1 +
|
|
src/x11/meta-x11-display.c | 1 -
|
|
3 files changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
Index: mutter-46.3/src/compositor/meta-compositor-x11.c
|
|
===================================================================
|
|
--- mutter-46.3.orig/src/compositor/meta-compositor-x11.c
|
|
+++ mutter-46.3/src/compositor/meta-compositor-x11.c
|
|
@@ -188,6 +188,8 @@ meta_compositor_x11_manage (MetaComposit
|
|
|
|
compositor_x11->have_x11_sync_object = meta_sync_ring_init (xdisplay);
|
|
|
|
+ meta_x11_display_redirect_windows (x11_display, display);
|
|
+
|
|
return TRUE;
|
|
}
|
|
|
|
Index: mutter-46.3/src/wayland/meta-xwayland.c
|
|
===================================================================
|
|
--- mutter-46.3.orig/src/wayland/meta-xwayland.c
|
|
+++ mutter-46.3/src/wayland/meta-xwayland.c
|
|
@@ -1180,6 +1180,7 @@ on_x11_display_setup (MetaDisplay
|
|
{
|
|
MetaX11Display *x11_display = meta_display_get_x11_display (display);
|
|
|
|
+ meta_x11_display_redirect_windows (x11_display, display);
|
|
meta_xwayland_init_dnd (x11_display);
|
|
meta_xwayland_init_xrandr (manager, x11_display);
|
|
}
|
|
Index: mutter-46.3/src/x11/meta-x11-display.c
|
|
===================================================================
|
|
--- mutter-46.3.orig/src/x11/meta-x11-display.c
|
|
+++ mutter-46.3/src/x11/meta-x11-display.c
|
|
@@ -306,8 +306,32 @@ static void
|
|
on_x11_display_opened (MetaX11Display *x11_display,
|
|
MetaDisplay *display)
|
|
{
|
|
+ Window old_active_xwindow = None;
|
|
+
|
|
+ if (!meta_is_wayland_compositor ())
|
|
+ {
|
|
+ meta_prop_get_window (display->x11_display,
|
|
+ display->x11_display->xroot,
|
|
+ display->x11_display->atom__NET_ACTIVE_WINDOW,
|
|
+ &old_active_xwindow);
|
|
+ }
|
|
+
|
|
meta_display_manage_all_xwindows (display);
|
|
- meta_x11_display_redirect_windows (x11_display, display);
|
|
+
|
|
+ if (old_active_xwindow != None)
|
|
+ {
|
|
+ MetaWindow *old_active_window;
|
|
+
|
|
+ old_active_window = meta_x11_display_lookup_x_window (x11_display,
|
|
+ old_active_xwindow);
|
|
+ if (old_active_window)
|
|
+ {
|
|
+ uint32_t timestamp;
|
|
+
|
|
+ timestamp = display->x11_display->timestamp;
|
|
+ meta_window_focus (old_active_window, timestamp);
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
static void
|
|
Index: mutter-46.3/src/core/display.c
|
|
===================================================================
|
|
--- mutter-46.3.orig/src/core/display.c
|
|
+++ mutter-46.3/src/core/display.c
|
|
@@ -908,9 +908,9 @@ meta_display_init_x11 (MetaDisplay
|
|
}
|
|
|
|
static void
|
|
-on_x11_initialized (MetaDisplay *display,
|
|
- GAsyncResult *result,
|
|
- gpointer user_data)
|
|
+on_mandatory_x11_initialized (MetaDisplay *display,
|
|
+ GAsyncResult *result,
|
|
+ gpointer user_data)
|
|
{
|
|
g_autoptr (GError) error = NULL;
|
|
|
|
@@ -941,9 +941,6 @@ meta_display_new (MetaContext *context,
|
|
MetaDisplay *display;
|
|
MetaDisplayPrivate *priv;
|
|
guint32 timestamp;
|
|
-#ifdef HAVE_X11_CLIENT
|
|
- Window old_active_xwindow = None;
|
|
-#endif
|
|
MetaMonitorManager *monitor_manager;
|
|
MetaSettings *settings;
|
|
MetaInputCapture *input_capture;
|
|
@@ -1032,7 +1029,7 @@ meta_display_new (MetaContext *context,
|
|
if (x11_display_policy == META_X11_DISPLAY_POLICY_MANDATORY)
|
|
{
|
|
meta_display_init_x11 (display, NULL,
|
|
- (GAsyncReadyCallback) on_x11_initialized,
|
|
+ (GAsyncReadyCallback) on_mandatory_x11_initialized,
|
|
NULL);
|
|
}
|
|
#endif /* HAVE_XWAYLAND */
|
|
@@ -1059,14 +1056,6 @@ meta_display_new (MetaContext *context,
|
|
display->last_focus_time = timestamp;
|
|
display->last_user_time = timestamp;
|
|
|
|
-#ifdef HAVE_X11
|
|
- if (!meta_is_wayland_compositor ())
|
|
- meta_prop_get_window (display->x11_display,
|
|
- display->x11_display->xroot,
|
|
- display->x11_display->atom__NET_ACTIVE_WINDOW,
|
|
- &old_active_xwindow);
|
|
-#endif
|
|
-
|
|
if (!meta_compositor_manage (display->compositor, error))
|
|
{
|
|
g_object_unref (display);
|
|
@@ -1087,30 +1076,7 @@ meta_display_new (MetaContext *context,
|
|
g_signal_connect (display->gesture_tracker, "state-changed",
|
|
G_CALLBACK (gesture_tracker_state_changed), display);
|
|
|
|
- /* We know that if mutter is running as a Wayland compositor,
|
|
- * we start out with no windows.
|
|
- */
|
|
-#ifdef HAVE_X11_CLIENT
|
|
- if (!meta_is_wayland_compositor ())
|
|
- meta_display_manage_all_xwindows (display);
|
|
-
|
|
- if (old_active_xwindow != None)
|
|
- {
|
|
- MetaWindow *old_active_window;
|
|
- old_active_window = meta_x11_display_lookup_x_window (display->x11_display,
|
|
- old_active_xwindow);
|
|
- if (old_active_window)
|
|
- meta_window_focus (old_active_window, timestamp);
|
|
- else
|
|
- meta_display_unset_input_focus (display, timestamp);
|
|
- }
|
|
- else
|
|
- {
|
|
- meta_display_unset_input_focus (display, timestamp);
|
|
- }
|
|
-#else
|
|
meta_display_unset_input_focus (display, timestamp);
|
|
-#endif
|
|
|
|
g_signal_connect (stage, "notify::is-grabbed",
|
|
G_CALLBACK (on_is_grabbed_changed), display);
|
|
Index: mutter-46.3/src/tests/x11-test.sh
|
|
===================================================================
|
|
--- mutter-46.3.orig/src/tests/x11-test.sh
|
|
+++ mutter-46.3/src/tests/x11-test.sh
|
|
@@ -34,6 +34,9 @@ echo \# Launched with pid $MUTTER2_PID
|
|
MUTTER2_PID=$!
|
|
wait $MUTTER1_PID
|
|
|
|
+echo \# Waiting for the second mutter to finish loading
|
|
+gdbus wait --session org.gnome.Mutter.IdleMonitor
|
|
+
|
|
sleep 2
|
|
|
|
echo \# Terminating clients > /dev/stderr
|