+static void
+dispose_objects (gpointer key,
+ gpointer value,
+ gpointer user_data)
+{
+ if (G_IS_OBJECT (value))
+ g_object_run_dispose (value);
+}
+
+static void
+modest_ui_dimming_manager_dispose (GObject *obj)
+{
+ ModestUIDimmingManagerPrivate *priv;
+
+ priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(obj);
+
+ if (priv->delayed_calls != NULL && (g_hash_table_size (priv->delayed_calls) > 0)) {
+ /* Remove all pending calls */
+ g_hash_table_foreach (priv->delayed_calls,
+ remove_all_timeouts,
+ NULL);
+ g_hash_table_remove_all (priv->delayed_calls);
+ }
+
+ if (priv->groups_map) {
+ g_hash_table_foreach (priv->groups_map, dispose_objects, NULL);
+ g_hash_table_unref (priv->groups_map);
+ priv->groups_map = NULL;
+ }
+
+ G_OBJECT_CLASS(parent_class)->dispose (obj);
+}
+