summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2011-01-04 00:55:04 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2011-01-06 14:39:41 +0900
commita28295a742d6492a03c92413e3570724406ca3e1 (patch)
tree03bccabead4aed51be445bdfaa3df8951e5494d6 /gtk/gtkwindow.c
parentb8c8f2ccb1a1b69514bf86c02f223b5f8482e457 (diff)
downloadgtk+-a28295a742d6492a03c92413e3570724406ca3e1.tar.gz
Dont show the GtkWindow when removing it from a parent and becomming a toplevel
Showing the window causes it to try to grab focus, this causes problems when embedded toplevels run through dispose cycles.
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r--gtk/gtkwindow.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 09879cecad..e69c0185bd 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -9236,14 +9236,16 @@ _gtk_window_set_is_toplevel (GtkWindow *window,
if (is_toplevel)
{
- gboolean was_visible = gtk_widget_get_visible (widget);
-
/* Pass through regular pathways of an embedded toplevel
* to go through unmapping and hiding the widget before
* becomming a toplevel again.
+ *
+ * We remain hidden after becomming toplevel in order to
+ * avoid problems during an embedded toplevel's dispose cycle
+ * (When a toplevel window is shown it tries to grab focus again,
+ * this causes problems while disposing).
*/
- if (was_visible)
- gtk_widget_hide (widget);
+ gtk_widget_hide (widget);
/* Save the toplevel this widget was previously anchored into before
* propagating a hierarchy-changed.
@@ -9266,13 +9268,6 @@ _gtk_window_set_is_toplevel (GtkWindow *window,
_gtk_widget_propagate_hierarchy_changed (widget, toplevel);
toplevel_list = g_slist_prepend (toplevel_list, window);
-
- /* If an embedded toplevel gets removed from the hierarchy
- * and is still in a visible state, we need to show it again
- * so it will be realized as a real toplevel again.
- */
- if (was_visible)
- gtk_widget_show (widget);
}
else
{