[mutter] xwayland: Destroy selection bridge windows before closing X11 display



commit 89727aa7479819976cee85b58eea5cd74c8ab551
Author: Jonas Ådahl <jadahl gmail com>
Date:   Sat Jun 30 09:04:48 2018 +0200

    xwayland: Destroy selection bridge windows before closing X11 display
    
    Listen to the "x11-display-closing" signal so we can destroy the X11
    selection bridge related windows before the X11 display is gone.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=759538

 src/wayland/meta-xwayland-private.h |  2 +-
 src/wayland/meta-xwayland.c         | 11 +++++++++--
 src/x11/meta-x11-display.c          |  2 +-
 3 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/src/wayland/meta-xwayland-private.h b/src/wayland/meta-xwayland-private.h
index ad2a2f6a7..fcf21ead6 100644
--- a/src/wayland/meta-xwayland-private.h
+++ b/src/wayland/meta-xwayland-private.h
@@ -29,7 +29,7 @@ meta_xwayland_start (MetaXWaylandManager *manager,
                      struct wl_display   *display);
 
 void
-meta_xwayland_complete_init (void);
+meta_xwayland_complete_init (MetaDisplay *display);
 
 void
 meta_xwayland_stop (MetaXWaylandManager *manager);
diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
index 955c57262..64550b189 100644
--- a/src/wayland/meta-xwayland.c
+++ b/src/wayland/meta-xwayland.c
@@ -550,9 +550,15 @@ out:
   return started;
 }
 
+static void
+on_x11_display_closing (MetaDisplay *display)
+{
+  meta_xwayland_shutdown_selection ();
+}
+
 /* To be called right after connecting */
 void
-meta_xwayland_complete_init (void)
+meta_xwayland_complete_init (MetaDisplay *display)
 {
   /* We install an X IO error handler in addition to the child watch,
      because after Xlib connects our child watch may not be called soon
@@ -561,6 +567,8 @@ meta_xwayland_complete_init (void)
   */
   XSetIOErrorHandler (x_io_error);
 
+  g_signal_connect (display, "x11-display-closing",
+                    G_CALLBACK (on_x11_display_closing), NULL);
   meta_xwayland_init_selection ();
 }
 
@@ -570,7 +578,6 @@ meta_xwayland_stop (MetaXWaylandManager *manager)
   char path[256];
 
   g_cancellable_cancel (manager->xserver_died_cancellable);
-  meta_xwayland_shutdown_selection ();
   g_clear_object (&manager->proc);
   g_clear_object (&manager->xserver_died_cancellable);
 
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
index 755a05b66..2bd0864d0 100644
--- a/src/x11/meta-x11-display.c
+++ b/src/x11/meta-x11-display.c
@@ -1005,7 +1005,7 @@ meta_x11_display_new (MetaDisplay *display, GError **error)
 
 #ifdef HAVE_WAYLAND
   if (meta_is_wayland_compositor ())
-    meta_xwayland_complete_init ();
+    meta_xwayland_complete_init (display);
 #endif
 
   if (meta_is_syncing ())


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]