diff options
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 12 | ||||
-rw-r--r-- | 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 a30861827e..d56c9bdf0e 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 94c1ba4ad8..a429ba311f 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 |