1 #include "ecore_private.h"
4 static Ecore_Idle_Exiter *idle_exiters = NULL;
5 static int idle_exiters_delete_me = 0;
8 * Add an idle exiter handler.
9 * @param func The function to call when exiting an idle state.
10 * @param data The data to be passed to the @p func call
11 * @return A handle to the idle exiter callback on success. NULL otherwise.
14 EAPI Ecore_Idle_Exiter *
15 ecore_idle_exiter_add(int (*func) (void *data), const void *data)
17 Ecore_Idle_Exiter *ie;
19 if (!func) return NULL;
20 ie = calloc(1, sizeof(Ecore_Idle_Exiter));
22 ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER);
24 ie->data = (void *)data;
25 idle_exiters = _ecore_list2_append(idle_exiters, ie);
30 * Delete an idle exiter handler from the list to be run on exiting idle state.
31 * @param idle_exiter The idle exiter to delete
32 * @return The data pointer that was being being passed to the handler if
33 * successful. NULL otherwise.
37 ecore_idle_exiter_del(Ecore_Idle_Exiter *idle_exiter)
39 if (!ECORE_MAGIC_CHECK(idle_exiter, ECORE_MAGIC_IDLE_EXITER))
41 ECORE_MAGIC_FAIL(idle_exiter, ECORE_MAGIC_IDLE_EXITER,
42 "ecore_idle_exiter_del");
45 idle_exiter->delete_me = 1;
46 idle_exiters_delete_me = 1;
47 return idle_exiter->data;
51 _ecore_idle_exiter_shutdown(void)
55 Ecore_Idle_Exiter *ie;
58 idle_exiters = _ecore_list2_remove(idle_exiters, ie);
59 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
62 idle_exiters_delete_me = 0;
66 _ecore_idle_exiter_call(void)
70 for (l = (Ecore_List2 *)idle_exiters; l; l = l->next)
72 Ecore_Idle_Exiter *ie;
74 ie = (Ecore_Idle_Exiter *)l;
77 if (!ie->func(ie->data)) ecore_idle_exiter_del(ie);
80 if (idle_exiters_delete_me)
82 for (l = (Ecore_List2 *)idle_exiters; l;)
84 Ecore_Idle_Exiter *ie;
86 ie = (Ecore_Idle_Exiter *)l;
90 idle_exiters = _ecore_list2_remove(idle_exiters, ie);
91 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
95 idle_exiters_delete_me = 0;
100 _ecore_idle_exiter_exist(void)
102 if (idle_exiters) return 1;