Make sure to disconnect signal handlers in dispose().
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user