+typedef struct
+{
+ ModestDimmingRulesGroup *group;
+ ModestUIDimmingManager *manager;
+ gchar *name;
+} DelayedDimmingRules;
+
+static gboolean
+process_dimming_rules_delayed (gpointer data)
+{
+ DelayedDimmingRules *helper = (DelayedDimmingRules *) data;
+ gpointer timeout_handler;
+ ModestUIDimmingManagerPrivate *priv;
+
+ /* We remove the timeout here because the execute action could
+ take too much time, and so this will be called again */
+ priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(helper->manager);
+ timeout_handler = g_hash_table_lookup (priv->delayed_calls, helper->name);
+
+ if (GPOINTER_TO_INT (timeout_handler) > 0) {
+ g_source_remove (GPOINTER_TO_INT (timeout_handler));
+ }
+
+ gdk_threads_enter ();
+ modest_dimming_rules_group_execute (helper->group);
+ gdk_threads_leave ();
+
+ return FALSE;
+}
+
+static void
+process_dimming_rules_delayed_destroyer (gpointer data)
+{
+ DelayedDimmingRules *helper = (DelayedDimmingRules *) data;
+ ModestUIDimmingManagerPrivate *priv;
+
+ priv = MODEST_UI_DIMMING_MANAGER_GET_PRIVATE(helper->manager);
+ g_hash_table_remove (priv->delayed_calls, helper->name);
+ g_free (helper->name);
+ g_object_unref (helper->manager);
+ g_slice_free (DelayedDimmingRules, helper);
+}
+