[gtk+] x11: Make unsetting transient-for work



commit d7f34874abe0b53f7eaf18a70d89145e06883ef6
Author: Benjamin Otte <otte redhat com>
Date:   Thu Dec 14 02:59:58 2017 +0100

    x11: Make unsetting transient-for work
    
    ... and just unset it from GtkWindow instead of fiddling with
    properties.

 gdk/x11/gdkwindow-x11.c |   12 ++++++++++--
 gtk/gtkwindow.c         |    3 +--
 2 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index a308618..d56c9bd 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -2448,11 +2448,19 @@ static void
 gdk_x11_window_set_transient_for (GdkWindow *window,
                                  GdkWindow *parent)
 {
-  if (!GDK_WINDOW_DESTROYED (window) && !GDK_WINDOW_DESTROYED (parent) &&
-      WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
+  if (GDK_WINDOW_DESTROYED (window) ||
+      !WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
+    return;
+
+  /* XSetTransientForHint() doesn't allow unsetting, so do it manually */
+  if (!GDK_WINDOW_DESTROYED (parent))
     XSetTransientForHint (GDK_WINDOW_XDISPLAY (window), 
                          GDK_WINDOW_XID (window),
                          GDK_WINDOW_XID (parent));
+  else
+    XDeleteProperty (GDK_WINDOW_XDISPLAY (window),
+                     GDK_WINDOW_XID (window),
+                     gdk_x11_get_xatom_by_name_for_display (GDK_WINDOW_DISPLAY (window), 
"WM_TRANSIENT_FOR"));
 }
 
 GdkCursor *
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 94c1ba4..a429ba3 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -3382,8 +3382,7 @@ gtk_window_transient_parent_unrealized (GtkWidget *parent,
                                        GtkWidget *window)
 {
   if (_gtk_widget_get_realized (window))
-    gdk_property_delete (_gtk_widget_get_window (window),
-                        gdk_atom_intern_static_string ("WM_TRANSIENT_FOR"));
+    gdk_window_set_transient_for (_gtk_widget_get_window (window), NULL);
 }
 
 static void


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