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.
This commit is contained in:
Tristan Van Berkom 2011-01-04 00:55:04 +09:00
parent b8c8f2ccb1
commit a28295a742
2 changed files with 7 additions and 11 deletions

View File

@ -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
{

View File

@ -9,6 +9,7 @@ remove_notebook_page (GtkWidget *button,
GtkWidget *toplevel)
{
gtk_container_remove (GTK_CONTAINER (notebook), toplevel);
gtk_widget_show (toplevel);
}
GtkWidget *