summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2013-05-12 20:58:48 -0400
committerMatthias Clasen <mclasen@redhat.com>2013-05-12 21:01:59 -0400
commit7052d4071cff1bbbebb58b867e364a231e4dc841 (patch)
tree38f8d3531f1eeae06bc307195211552547172899
parentd31391b0c702bbda5332df6497e73e3ec59ed2c3 (diff)
downloadgtk+-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.c28
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;