This will leak the timer source when the bubble gets dismissed before it times out. I don't know if that ever happens, but I recommend unsetting priv->timer_id in the callback, just in case:
+ /* This function always returns FALSE, which removes the timer
+ * source. Unset priv->timer_id so that we don't call
+ * g_source_remove() on it later. */
+ bubble_set_timer_id (self, 0);
+
if (GET_PRIVATE (self)->composited)
{ bubble_fade_out (self, 300);
This will leak the timer source when the bubble gets dismissed before it times out. I don't know if that ever happens, but I recommend unsetting priv->timer_id in the callback, just in case:
=== modified file 'src/bubble.c'
g_return_ val_if_ fail (IS_BUBBLE (self), FALSE);
--- src/bubble.c 2012-11-26 20:29:43 +0000
+++ src/bubble.c 2013-12-04 15:12:00 +0000
@@ -3038,6 +3038,11 @@
{
+ /* This function always returns FALSE, which removes the timer
bubble_ fade_out (self, 300);
+ * source. Unset priv->timer_id so that we don't call
+ * g_source_remove() on it later. */
+ bubble_set_timer_id (self, 0);
+
if (GET_PRIVATE (self)->composited)
{