diff options
author | Owen Taylor <owt1@cornell.edu> | 1998-04-08 21:40:45 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-04-08 21:40:45 +0000 |
commit | 520fd17eca6e2ad8de2261a6553f59b8368d3bdb (patch) | |
tree | 1598a9710267467da7efef4debcd8b59f62c34f3 | |
parent | 09d32399abfccb7d7c42ea60463baf1956e432c4 (diff) | |
download | gtk+-520fd17eca6e2ad8de2261a6553f59b8368d3bdb.tar.gz |
Make sure widgets get removed from the resize queue before the connection
Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu>
* gtk/gtkwidget.c (gtk_widget_unparent): Make sure
widgets get removed from the resize queue before the
connection between them and the resize queue is broken
by unparenting their parent.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 7 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 40 |
8 files changed, 85 insertions, 4 deletions
@@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 2eb4bc17ed..5addd50cbd 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 2eb4bc17ed..5addd50cbd 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 2eb4bc17ed..5addd50cbd 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 2eb4bc17ed..5addd50cbd 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 2eb4bc17ed..5addd50cbd 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 2eb4bc17ed..5addd50cbd 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Wed Apr 8 17:27:40 1998 Owen Taylor <owt1@cornell.edu> + + * gtk/gtkwidget.c (gtk_widget_unparent): Make sure + widgets get removed from the resize queue before the + connection between them and the resize queue is broken + by unparenting their parent. + 1998-04-08 Miguel de Icaza <miguel@nuclecu.unam.mx> * gdk/gdk.c (gdk_event_translate): During drag and drop, set the diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8c7d0b4ce9..866d66cc7c 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -1129,6 +1129,7 @@ gtk_widget_unparent (GtkWidget *widget) GtkWidget *toplevel; GtkWidget *child; GtkWidget *old_parent; + GSList *tmp_list, *prev_list; g_return_if_fail (widget != NULL); if (widget->parent == NULL) @@ -1149,11 +1150,42 @@ gtk_widget_unparent (GtkWidget *widget) gtk_window_set_focus (GTK_WINDOW (toplevel), NULL); } - if (GTK_WIDGET_RESIZE_NEEDED (widget)) + /* Remove the widget and all its children from toplevel->resize_widgets + */ + + /* Three ways to make this prettier: + * Write a g_slist_conditional_remove (GSList, gboolean (*)(gpointer)) + * Change resize_widgets to a GList + * Just bite the bullet and use g_slist_remove + */ + tmp_list = GTK_CONTAINER (toplevel)->resize_widgets; + prev_list = NULL; + while (tmp_list) { - GTK_CONTAINER (toplevel)->resize_widgets = - g_slist_remove (GTK_CONTAINER (toplevel)->resize_widgets, widget); - GTK_PRIVATE_UNSET_FLAG (widget, GTK_RESIZE_NEEDED); + GSList *tmp = tmp_list; + GtkWidget *child = (GtkWidget *)tmp->data; + GtkWidget *parent = child; + + tmp_list = tmp_list->next; + + while (parent && (parent != widget)) + parent = parent->parent; + + if (parent == widget) + { + GTK_PRIVATE_UNSET_FLAG (child, GTK_RESIZE_NEEDED); + + if (prev_list) + prev_list->next = tmp_list; + else + GTK_CONTAINER (toplevel)->resize_widgets = tmp_list; + + tmp->next = NULL; + + g_slist_free_1 (tmp); + } + else + prev_list = tmp; } if (widget->window && |