summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorWilliam Jon McCann <william.jon.mccann@gmail.com>2014-02-21 13:43:55 -0500
committerWilliam Jon McCann <william.jon.mccann@gmail.com>2014-02-21 14:51:25 -0500
commitc28784524016b2a8eac18d5046ebc8cdaca7f9b0 (patch)
tree9ec2dc4dfff91ad5d777642b9cc6fd8711175c19 /gtk
parentca4910cd79aba626699065fe102e83020a332fdb (diff)
downloadgtk+-c28784524016b2a8eac18d5046ebc8cdaca7f9b0.tar.gz
Unregister the popover before destroying it
Fixes a leak of the registered_windows list in GtkWidget. https://bugzilla.gnome.org/show_bug.cgi?id=554618
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkwindow.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 7d37b6f165..befca5ac85 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -1338,8 +1338,18 @@ popover_destroy (GtkWindowPopover *popover)
popover->unmap_id = 0;
}
- if (popover->widget && gtk_widget_get_parent (popover->widget))
- gtk_widget_unparent (popover->widget);
+ if (popover->widget)
+ {
+ GtkWidget *parent;
+
+ parent = gtk_widget_get_parent (popover->widget);
+
+ if (parent)
+ {
+ gtk_widget_unregister_window (parent, popover->window);
+ gtk_widget_unparent (popover->widget);
+ }
+ }
if (popover->window)
gdk_window_destroy (popover->window);
@@ -6252,8 +6262,10 @@ gtk_window_realize (GtkWidget *widget)
static void
popover_unrealize (GtkWidget *widget,
- GtkWindowPopover *popover)
+ GtkWindowPopover *popover,
+ GtkWindow *window)
{
+ gtk_widget_unregister_window (GTK_WIDGET (window), popover->window);
gtk_widget_unrealize (popover->widget);
gdk_window_destroy (popover->window);
popover->window = NULL;
@@ -6316,7 +6328,7 @@ gtk_window_unrealize (GtkWidget *widget)
{
GtkWindowPopover *popover = link->data;
link = link->next;
- popover_unrealize (popover->widget, popover);
+ popover_unrealize (popover->widget, popover, window);
}
GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);