summaryrefslogtreecommitdiff
path: root/gtk/gtkpopover.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2014-09-15 14:05:43 +0200
committerMatthias Clasen <mclasen@redhat.com>2014-09-22 20:59:09 -0400
commit0285a255bc6692a2869f95776846a2c6f461fcea (patch)
tree6c54ba3462d8b71a2e6094e51573fbadaea09e54 /gtk/gtkpopover.c
parent6b7b55f9b2b9eb7e05f68e932f9c804cb7ada412 (diff)
downloadgtk+-0285a255bc6692a2869f95776846a2c6f461fcea.tar.gz
popover: Don't run full dispose() when unmanaging the widget
A popover can go unmanaged for 2 reasons, when the widget it points to gets destroyed, or transitionally in gtk_popover_set_relative_to(). In both of these cases it makes sense to only unset popover information about the previous widget managing it, if the popover is meant to survive the unmanaging through extra refs. Also, the focus widget prior to a modal popover being shown is considered information about the relative_to widget, unset it on gtk_popover_update_relative_to() with the rest. https://bugzilla.gnome.org/show_bug.cgi?id=736193
Diffstat (limited to 'gtk/gtkpopover.c')
-rw-r--r--gtk/gtkpopover.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index bdb8c6aaf0..65e1b05841 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -1455,7 +1455,7 @@ _gtk_popover_parent_size_allocate (GtkWidget *widget,
static void
_unmanage_popover (GObject *object)
{
- g_object_run_dispose (object);
+ gtk_popover_update_relative_to (GTK_POPOVER (object), NULL);
g_object_unref (object);
}
@@ -1577,6 +1577,8 @@ gtk_popover_update_relative_to (GtkPopover *popover,
priv->window = NULL;
}
+ g_clear_object (&priv->prev_focus_widget);
+
if (priv->widget)
{
if (g_signal_handler_is_connected (priv->widget, priv->hierarchy_changed_id))