window: Protect against popover destruction on ::unmap
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 16 Mar 2015 12:46:14 +0000 (13:46 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 16 Mar 2015 15:27:06 +0000 (16:27 +0100)
On popover_unmap(), perform the gtk_widget_unmap() call last, so the
GtkWindowPopover data is ensured to be alive throughout the function
if the popover widget is destroyed right on ::unmap.

https://bugzilla.gnome.org/show_bug.cgi?id=745829

gtk/gtkwindow.c

index 1cac7b39c150f3daf5b99fabd052955f253dc94f..60d66e5c47b6db0b1035217999d915ff227a661e 100644 (file)
@@ -5955,17 +5955,17 @@ static void
 popover_unmap (GtkWidget        *widget,
                GtkWindowPopover *popover)
 {
-  if (popover->window)
-    {
-      gtk_widget_unmap (popover->widget);
-      gdk_window_hide (popover->window);
-    }
-
   if (popover->unmap_id)
     {
       g_signal_handler_disconnect (widget, popover->unmap_id);
       popover->unmap_id = 0;
     }
+
+  if (popover->window)
+    {
+      gdk_window_hide (popover->window);
+      gtk_widget_unmap (popover->widget);
+    }
 }
 
 static void