gtk+ r22191 - in trunk: . gtk
- From: matthiasc svn gnome org
- To: svn-commits-list gnome org
- Subject: gtk+ r22191 - in trunk: . gtk
- Date: Fri, 23 Jan 2009 05:57:36 +0000 (UTC)
Author: matthiasc
Date: Fri Jan 23 05:57:36 2009
New Revision: 22191
URL: http://svn.gnome.org/viewvc/gtk+?rev=22191&view=rev
Log:
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.
Modified:
trunk/ChangeLog
trunk/gtk/gtkplug.c
trunk/gtk/gtkwindow.c
trunk/gtk/gtkwindow.h
Modified: trunk/gtk/gtkplug.c
==============================================================================
--- trunk/gtk/gtkplug.c (original)
+++ trunk/gtk/gtkplug.c Fri Jan 23 05:57:36 2009
@@ -220,7 +220,7 @@
if (GTK_WIDGET_MAPPED (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_widget_propagate_hierarchy_changed (GTK_WIDGET (plug), GTK_WIDGET (plug));
@@ -235,7 +235,7 @@
plug->modality_group = gtk_window_group_new ();
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_widget_propagate_hierarchy_changed (GTK_WIDGET (plug), NULL);
Modified: trunk/gtk/gtkwindow.c
==============================================================================
--- trunk/gtk/gtkwindow.c (original)
+++ trunk/gtk/gtkwindow.c Fri Jan 23 05:57:36 2009
@@ -8296,6 +8296,41 @@
}
/**
+ * _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:
* @window: a #GtkWindow
* @has_toplevel_focus: %TRUE if the in
Modified: trunk/gtk/gtkwindow.h
==============================================================================
--- trunk/gtk/gtkwindow.h (original)
+++ trunk/gtk/gtkwindow.h Fri Jan 23 05:57:36 2009
@@ -420,6 +420,9 @@
void _gtk_window_set_is_active (GtkWindow *window,
gboolean is_active);
+void _gtk_window_set_is_toplevel (GtkWindow *window,
+ gboolean is_toplevel);
+
typedef void (*GtkWindowKeysForeachFunc) (GtkWindow *window,
guint keyval,
GdkModifierType modifiers,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]