From 0422352139c6b865b3d2fbbc9430b845fdce9aef Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Tue, 1 Feb 2011 16:47:20 +0900 Subject: [PATCH] Make sure to disconnect signal handlers in dispose(). --- eek/eek-clutter-key.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/eek/eek-clutter-key.c b/eek/eek-clutter-key.c index 0f3e3797..0c5f16e8 100644 --- a/eek/eek-clutter-key.c +++ b/eek/eek-clutter-key.c @@ -40,6 +40,8 @@ struct _EekClutterKeyPrivate { EekKey *key; EekClutterRenderer *renderer; + gulong pressed_handler; + gulong released_handler; }; static void @@ -99,10 +101,12 @@ eek_clutter_key_real_realize (ClutterActor *self) set_position (self); clutter_actor_set_reactive (self, TRUE); - g_signal_connect (priv->key, "pressed", - G_CALLBACK(on_pressed), self); - g_signal_connect (priv->key, "released", - G_CALLBACK(on_released), self); + priv->pressed_handler = + g_signal_connect (priv->key, "pressed", + G_CALLBACK(on_pressed), self); + priv->released_handler = + g_signal_connect (priv->key, "released", + G_CALLBACK(on_released), self); } static void @@ -225,6 +229,10 @@ eek_clutter_key_dispose (GObject *object) } if (priv->key) { + if (g_signal_handler_is_connected (priv->key, priv->pressed_handler)) + g_signal_handler_disconnect (priv->key, priv->pressed_handler); + if (g_signal_handler_is_connected (priv->key, priv->released_handler)) + g_signal_handler_disconnect (priv->key, priv->released_handler); g_object_unref (priv->key); priv->key = NULL; }