Make sure to disconnect signal handlers in dispose().

This commit is contained in:
Daiki Ueno
2011-02-01 16:47:20 +09:00
parent 4b590dc05d
commit 0422352139

View File

@ -40,6 +40,8 @@ struct _EekClutterKeyPrivate
{ {
EekKey *key; EekKey *key;
EekClutterRenderer *renderer; EekClutterRenderer *renderer;
gulong pressed_handler;
gulong released_handler;
}; };
static void static void
@ -99,10 +101,12 @@ eek_clutter_key_real_realize (ClutterActor *self)
set_position (self); set_position (self);
clutter_actor_set_reactive (self, TRUE); clutter_actor_set_reactive (self, TRUE);
g_signal_connect (priv->key, "pressed", priv->pressed_handler =
G_CALLBACK(on_pressed), self); g_signal_connect (priv->key, "pressed",
g_signal_connect (priv->key, "released", G_CALLBACK(on_pressed), self);
G_CALLBACK(on_released), self); priv->released_handler =
g_signal_connect (priv->key, "released",
G_CALLBACK(on_released), self);
} }
static void static void
@ -225,6 +229,10 @@ eek_clutter_key_dispose (GObject *object)
} }
if (priv->key) { 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); g_object_unref (priv->key);
priv->key = NULL; priv->key = NULL;
} }