1 #include "ecore_private.h"
4 static Ecore_Idle_Enterer *idle_enterers = NULL;
5 static int idle_enterers_delete_me = 0;
8 * Add an idle enterer handler.
9 * @param func The function to call when entering an idle state.
10 * @param data The data to be passed to the @p func call
11 * @return A handle to the idle enterer callback if successful. Otherwise,
15 EAPI Ecore_Idle_Enterer *
16 ecore_idle_enterer_add(int (*func) (void *data), const void *data)
18 Ecore_Idle_Enterer *ie;
20 if (!func) return NULL;
21 ie = calloc(1, sizeof(Ecore_Idle_Enterer));
23 ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
25 ie->data = (void *)data;
26 idle_enterers = _ecore_list2_append(idle_enterers, ie);
31 * Add an idle enterer handler at the start of the list so it gets called earlier than others.
32 * @param func The function to call when entering an idle state.
33 * @param data The data to be passed to the @p func call
34 * @return A handle to the idle enterer callback if successful. Otherwise,
38 EAPI Ecore_Idle_Enterer *
39 ecore_idle_enterer_before_add(int (*func) (void *data), const void *data)
41 Ecore_Idle_Enterer *ie;
43 if (!func) return NULL;
44 ie = calloc(1, sizeof(Ecore_Idle_Enterer));
46 ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
48 ie->data = (void *)data;
49 idle_enterers = _ecore_list2_prepend(idle_enterers, ie);
54 * Delete an idle enterer callback.
55 * @param idle_enterer The idle enterer to delete
56 * @return The data pointer passed to the idler enterer callback on success.
61 ecore_idle_enterer_del(Ecore_Idle_Enterer *idle_enterer)
63 if (!ECORE_MAGIC_CHECK(idle_enterer, ECORE_MAGIC_IDLE_ENTERER))
65 ECORE_MAGIC_FAIL(idle_enterer, ECORE_MAGIC_IDLE_ENTERER,
66 "ecore_idle_enterer_del");
69 idle_enterer->delete_me = 1;
70 idle_enterers_delete_me = 1;
71 return idle_enterer->data;
75 _ecore_idle_enterer_shutdown(void)
79 Ecore_Idle_Enterer *ie;
82 idle_enterers = _ecore_list2_remove(idle_enterers, ie);
83 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
86 idle_enterers_delete_me = 0;
90 _ecore_idle_enterer_call(void)
94 for (l = (Ecore_List2 *)idle_enterers; l; l = l->next)
96 Ecore_Idle_Enterer *ie;
98 ie = (Ecore_Idle_Enterer *)l;
101 if (!ie->func(ie->data)) ecore_idle_enterer_del(ie);
104 if (idle_enterers_delete_me)
106 for (l = (Ecore_List2 *)idle_enterers; l;)
108 Ecore_Idle_Enterer *ie;
110 ie = (Ecore_Idle_Enterer *)l;
114 idle_enterers = _ecore_list2_remove(idle_enterers, ie);
115 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
119 idle_enterers_delete_me = 0;
124 _ecore_idle_enterer_exist(void)
126 if (idle_enterers) return 1;