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