Commit 4569b49b authored by Matthias Clasen's avatar Matthias Clasen

Keep GtkPlug in sync with the global list of toplevels.

        Patch by Federico Mena Quintero

        * gtk/gtkwindow.h:
        * gtk/gtkwindow.c (_gtk_window_set_is_toplevel): New internal
        function used when a GtkPlug parents/unparents itself by an
        in-process GtkSocket.  This keeps the plug's GTK_TOPLEVEL flag in
        sync with the global toplevel_list.

        * gtk/gtkplug.c (gtk_plug_set_is_child): Call
        _gtk_window_set_is_toplevel() to keep the toplevel list updated,
        instead of just setting/unsetting the GTK_TOPLEVEL flag.


svn path=/trunk/; revision=22191
parent 5c99971a
2009-01-23 Matthias Clasen <mclasen@redhat.com>
Bug 536965 – GtkPlug: crash on theme change
Keep GtkPlug in sync with the global list of toplevels.
Patch by Federico Mena Quintero
* gtk/gtkwindow.h:
* gtk/gtkwindow.c (_gtk_window_set_is_toplevel): New internal
function used when a GtkPlug parents/unparents itself by an
in-process GtkSocket. This keeps the plug's GTK_TOPLEVEL flag in
sync with the global toplevel_list.
* gtk/gtkplug.c (gtk_plug_set_is_child): Call
_gtk_window_set_is_toplevel() to keep the toplevel list updated,
instead of just setting/unsetting the GTK_TOPLEVEL flag.
2009-01-23 Matthias Clasen <mclasen@redhat.com> 2009-01-23 Matthias Clasen <mclasen@redhat.com>
Bug 568744 – Spellfixes in GtkTreeView's documentation Bug 568744 – Spellfixes in GtkTreeView's documentation
......
...@@ -220,7 +220,7 @@ gtk_plug_set_is_child (GtkPlug *plug, ...@@ -220,7 +220,7 @@ gtk_plug_set_is_child (GtkPlug *plug,
if (GTK_WIDGET_MAPPED (plug)) if (GTK_WIDGET_MAPPED (plug))
gtk_widget_unmap (GTK_WIDGET (plug)); gtk_widget_unmap (GTK_WIDGET (plug));
GTK_WIDGET_UNSET_FLAGS (plug, GTK_TOPLEVEL); _gtk_window_set_is_toplevel (GTK_WINDOW (plug), FALSE);
gtk_container_set_resize_mode (GTK_CONTAINER (plug), GTK_RESIZE_PARENT); gtk_container_set_resize_mode (GTK_CONTAINER (plug), GTK_RESIZE_PARENT);
_gtk_widget_propagate_hierarchy_changed (GTK_WIDGET (plug), GTK_WIDGET (plug)); _gtk_widget_propagate_hierarchy_changed (GTK_WIDGET (plug), GTK_WIDGET (plug));
...@@ -235,7 +235,7 @@ gtk_plug_set_is_child (GtkPlug *plug, ...@@ -235,7 +235,7 @@ gtk_plug_set_is_child (GtkPlug *plug,
plug->modality_group = gtk_window_group_new (); plug->modality_group = gtk_window_group_new ();
gtk_window_group_add_window (plug->modality_group, GTK_WINDOW (plug)); gtk_window_group_add_window (plug->modality_group, GTK_WINDOW (plug));
GTK_WIDGET_SET_FLAGS (plug, GTK_TOPLEVEL); _gtk_window_set_is_toplevel (GTK_WINDOW (plug), TRUE);
gtk_container_set_resize_mode (GTK_CONTAINER (plug), GTK_RESIZE_QUEUE); gtk_container_set_resize_mode (GTK_CONTAINER (plug), GTK_RESIZE_QUEUE);
_gtk_widget_propagate_hierarchy_changed (GTK_WIDGET (plug), NULL); _gtk_widget_propagate_hierarchy_changed (GTK_WIDGET (plug), NULL);
......
...@@ -8295,6 +8295,41 @@ _gtk_window_set_is_active (GtkWindow *window, ...@@ -8295,6 +8295,41 @@ _gtk_window_set_is_active (GtkWindow *window,
} }
} }
/**
* _gtk_windwo_set_is_toplevel:
* @window: a #GtkWindow
* @is_toplevel: %TRUE if the window is still a real toplevel (nominally a
* parent of the root window); %FALSE if it is not (for example, for an
* in-process, parented GtkPlug)
*
* Internal function used by #GtkPlug when it gets parented/unparented by a
* #GtkSocket. This keeps the @window's #GTK_TOPLEVEL flag in sync with the
* global list of toplevel windows.
*/
void
_gtk_window_set_is_toplevel (GtkWindow *window,
gboolean is_toplevel)
{
if (GTK_WIDGET_TOPLEVEL (window))
g_assert (g_list_find (toplevel_list, window) != NULL);
else
g_assert (g_list_find (toplevel_list, window) == NULL);
if (is_toplevel == GTK_WIDGET_TOPLEVEL (window))
return;
if (is_toplevel)
{
GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL);
toplevel_list = g_slist_prepend (toplevel_list, window);
}
else
{
GTK_WIDGET_UNSET_FLAGS (window, GTK_TOPLEVEL);
toplevel_list = g_slist_remove (toplevel_list, window);
}
}
/** /**
* _gtk_window_set_has_toplevel_focus: * _gtk_window_set_has_toplevel_focus:
* @window: a #GtkWindow * @window: a #GtkWindow
......
...@@ -420,6 +420,9 @@ void _gtk_window_unset_focus_and_default (GtkWindow *window, ...@@ -420,6 +420,9 @@ void _gtk_window_unset_focus_and_default (GtkWindow *window,
void _gtk_window_set_is_active (GtkWindow *window, void _gtk_window_set_is_active (GtkWindow *window,
gboolean is_active); gboolean is_active);
void _gtk_window_set_is_toplevel (GtkWindow *window,
gboolean is_toplevel);
typedef void (*GtkWindowKeysForeachFunc) (GtkWindow *window, typedef void (*GtkWindowKeysForeachFunc) (GtkWindow *window,
guint keyval, guint keyval,
GdkModifierType modifiers, GdkModifierType modifiers,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment