[mutter/wip/carlosg/x11less-preparations: 86/93] x11: Unmanage X11 windows on MetaX11Display finalization



commit cc9b2b926917b35a64bdf1f1836e0ace2a528729
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Dec 10 13:42:53 2018 +0100

    x11: Unmanage X11 windows on MetaX11Display finalization
    
    This used to be relied upon meta_display_close(), but MetaDisplay
    and MetaX11Display lifetimes may be unrelated.

 src/x11/meta-x11-display.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
---
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
index f7f6a3a52..f01d4af22 100644
--- a/src/x11/meta-x11-display.c
+++ b/src/x11/meta-x11-display.c
@@ -94,6 +94,27 @@ static void unset_wm_check_hint (MetaX11Display *x11_display);
 static void prefs_changed_callback (MetaPreference pref,
                                     void          *data);
 
+static void
+meta_x11_display_unmanage_windows (MetaX11Display *x11_display)
+{
+  GList *windows, *l;
+  MetaWindow *window;
+
+  if (!x11_display->xids)
+    return;
+
+  windows = g_hash_table_get_values (x11_display->xids);
+  g_list_foreach (windows, (GFunc) g_object_ref, NULL);
+
+  for (l = windows; l; l = l->next)
+    {
+      window = l->data;
+      if (!window->unmanaging)
+        meta_window_unmanage (window, META_CURRENT_TIME);
+    }
+  g_list_free_full (windows, g_object_unref);
+}
+
 static void
 meta_x11_display_dispose (GObject *object)
 {
@@ -105,6 +126,8 @@ meta_x11_display_dispose (GObject *object)
 
   meta_x11_display_ungrab_keys (x11_display);
 
+  meta_x11_display_unmanage_windows (x11_display);
+
   if (x11_display->ui)
     {
       meta_ui_free (x11_display->ui);


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