From 19391a9626b087bd4df452e8699d53caa54c350f Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 6 May 2013 15:46:25 -0700 Subject: [PATCH] cally: Use a weak pointer to hold the key focus in CallyStage We want to avoid the pointer getting stale, and causing crashes. https://bugzilla.gnome.org/show_bug.cgi?id=692706 --- clutter/cally/cally-stage.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/clutter/cally/cally-stage.c b/clutter/cally/cally-stage.c index 2b1cfd179..c95ccb0f8 100644 --- a/clutter/cally/cally-stage.c +++ b/clutter/cally/cally-stage.c @@ -139,7 +139,11 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage, AtkObject *old = NULL; if (self->priv->key_focus != NULL) - old = clutter_actor_get_accessible (self->priv->key_focus); + { + g_object_remove_weak_pointer (G_OBJECT (self->priv->key_focus), + (gpointer *) &self->priv->key_focus); + old = clutter_actor_get_accessible (self->priv->key_focus); + } else old = clutter_actor_get_accessible (CLUTTER_ACTOR (stage)); @@ -154,7 +158,19 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage, self->priv->key_focus = key_focus; if (key_focus != NULL) - new = clutter_actor_get_accessible (key_focus); + { + /* ensure that if the key focus goes away, the field inside + * CallyStage is reset. see bug: + * + * https://bugzilla.gnome.org/show_bug.cgi?id=692706 + * + * we remove the weak pointer above. + */ + g_object_add_weak_pointer (G_OBJECT (self->priv->key_focus), + (gpointer *) &self->priv->key_focus); + + new = clutter_actor_get_accessible (key_focus); + } else new = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));