Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:bmwiedemann:reproducible:distribution:ring1
mutter
mutter-fix-x11-restart.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mutter-fix-x11-restart.patch of Package mutter
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor