Make ui dimming manager dispose stop delayed handlers (fixes NB#97124)
authorJose Dapena Paz <jdapena@igalia.com>
Wed, 7 Jan 2009 16:09:02 +0000 (16:09 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Wed, 7 Jan 2009 16:09:02 +0000 (16:09 +0000)
pmo-trunk-r7076

src/modest-ui-dimming-manager.c
src/widgets/modest-window.c

index 0beef15..52f6cfc 100644 (file)
@@ -34,6 +34,7 @@
 static void modest_ui_dimming_manager_class_init (ModestUIDimmingManagerClass *klass);
 static void modest_ui_dimming_manager_init       (ModestUIDimmingManager *obj);
 static void modest_ui_dimming_manager_finalize   (GObject *obj);
 static void modest_ui_dimming_manager_class_init (ModestUIDimmingManagerClass *klass);
 static void modest_ui_dimming_manager_init       (ModestUIDimmingManager *obj);
 static void modest_ui_dimming_manager_finalize   (GObject *obj);
+static void modest_ui_dimming_manager_dispose    (GObject *obj);
 
 static void _process_all_rules (gpointer key, gpointer value, gpointer user_data);
 
 
 static void _process_all_rules (gpointer key, gpointer value, gpointer user_data);
 
@@ -83,6 +84,7 @@ modest_ui_dimming_manager_class_init (ModestUIDimmingManagerClass *klass)
 
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_ui_dimming_manager_finalize;
 
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_ui_dimming_manager_finalize;
+       gobject_class->dispose  = modest_ui_dimming_manager_dispose;
 
        g_type_class_add_private (gobject_class, sizeof(ModestUIDimmingManagerPrivate));
 }
 
        g_type_class_add_private (gobject_class, sizeof(ModestUIDimmingManagerPrivate));
 }
@@ -135,6 +137,24 @@ modest_ui_dimming_manager_finalize (GObject *obj)
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
+static void
+modest_ui_dimming_manager_dispose (GObject *obj)
+{
+       ModestUIDimmingManagerPrivate *priv;
+
+       priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(obj);
+
+       if (priv->delayed_calls != NULL) {
+               /* Remove all pending calls */
+               g_hash_table_foreach (priv->delayed_calls,
+                                     remove_all_timeouts,
+                                     NULL);
+               g_hash_table_remove_all (priv->delayed_calls);
+       }
+
+       G_OBJECT_CLASS(parent_class)->dispose (obj);
+}
+
 
 ModestUIDimmingManager*
 modest_ui_dimming_manager_new()
 
 ModestUIDimmingManager*
 modest_ui_dimming_manager_new()
index 3136b8f..99b0015 100644 (file)
@@ -179,6 +179,7 @@ modest_window_dispose (GObject *obj)
                priv->ui_manager = NULL;
        }
        if (priv->ui_dimming_manager) {
                priv->ui_manager = NULL;
        }
        if (priv->ui_dimming_manager) {
+               g_object_run_dispose (G_OBJECT (priv->ui_dimming_manager));
                g_object_unref (G_OBJECT(priv->ui_dimming_manager));
                priv->ui_dimming_manager = NULL;
        }
                g_object_unref (G_OBJECT(priv->ui_dimming_manager));
                priv->ui_dimming_manager = NULL;
        }