diff options
author | Matthias Clasen <mclasen@redhat.com> | 2013-05-12 20:58:48 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2013-05-12 21:01:59 -0400 |
commit | 7052d4071cff1bbbebb58b867e364a231e4dc841 (patch) | |
tree | 38f8d3531f1eeae06bc307195211552547172899 | |
parent | d31391b0c702bbda5332df6497e73e3ec59ed2c3 (diff) | |
download | gtk+-7052d4071cff1bbbebb58b867e364a231e4dc841.tar.gz |
csd: Properly dispose custom titlebars
gtk_bin_remove can't handle internal children, so we have
to unset the titlebar widget before chaining up in dispose.
https://bugzilla.gnome.org/show_bug.cgi?id=700054
-rw-r--r-- | gtk/gtkwindow.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 12bfd6fc28..4a4e1f3031 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -540,6 +540,7 @@ static void gtk_window_buildable_custom_finished (GtkBuildable *buildable, gpointer user_data); static void ensure_state_flag_backdrop (GtkWidget *widget); +static void unset_titlebar (GtkWindow *window); G_DEFINE_TYPE_WITH_CODE (GtkWindow, gtk_window, GTK_TYPE_BIN, G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, @@ -2547,6 +2548,7 @@ gtk_window_dispose (GObject *object) gtk_window_set_focus (window, NULL); gtk_window_set_default (window, NULL); + unset_titlebar (window); remove_attach_widget (GTK_WINDOW (object)); @@ -3437,6 +3439,22 @@ gtk_window_set_geometry_hints (GtkWindow *window, gtk_widget_queue_resize_no_redraw (GTK_WIDGET (window)); } +static void +unset_titlebar (GtkWindow *window) +{ + GtkWindowPrivate *priv = window->priv; + + if (priv->title_box != NULL) + { + gtk_widget_unparent (priv->title_box); + priv->title_box = NULL; + priv->title_icon = NULL; + priv->title_min_button = NULL; + priv->title_max_button = NULL; + priv->title_close_button = NULL; + } +} + /** * gtk_window_set_titlebar: * @window: a #GtkWindow @@ -3462,15 +3480,7 @@ gtk_window_set_titlebar (GtkWindow *window, g_return_if_fail (GTK_IS_WINDOW (window)); - if (priv->title_box != NULL) - { - gtk_widget_unparent (priv->title_box); - priv->title_box = NULL; - priv->title_icon = NULL; - priv->title_min_button = NULL; - priv->title_max_button = NULL; - priv->title_close_button = NULL; - } + unset_titlebar (window); priv->custom_title = TRUE; priv->title_box = titlebar; |