8c71d73fccb1a080ae1d98f108cdcfc02f680b71
[profile/ivi/ecore.git] / src / lib / ecore / Ecore.h
1 #ifndef _ECORE_H
2 #define _ECORE_H
3
4 #ifdef _MSC_VER
5 # include <Evil.h>
6 #endif
7
8 #include <Eina.h>
9
10 #ifdef EAPI
11 # undef EAPI
12 #endif
13
14 #ifdef _WIN32
15 # ifdef EFL_ECORE_BUILD
16 #  ifdef DLL_EXPORT
17 #   define EAPI __declspec(dllexport)
18 #  else
19 #   define EAPI
20 #  endif /* ! DLL_EXPORT */
21 # else
22 #  define EAPI __declspec(dllimport)
23 # endif /* ! EFL_ECORE_BUILD */
24 #else
25 # ifdef __GNUC__
26 #  if __GNUC__ >= 4
27 #   define EAPI __attribute__ ((visibility("default")))
28 #  else
29 #   define EAPI
30 #  endif
31 # else
32 #  define EAPI
33 # endif
34 #endif /* ! _WIN32 */
35
36 /**
37  * @file Ecore.h
38  * @brief The file that provides the program utility, main loop and timer
39  *        functions.
40  *
41  * This header provides the Ecore event handling loop.  For more
42  * details, see @ref Ecore_Main_Loop_Group.
43  *
44  * For the main loop to be of any use, you need to be able to add events
45  * and event handlers.  Events for file descriptor events are covered in
46  * @ref Ecore_FD_Handler_Group.
47  *
48  * Time functions are covered in @ref Ecore_Time_Group.
49  *
50  * There is also provision for callbacks for when the loop enters or
51  * exits an idle state. See @ref Idle_Group for more information.
52  *
53  * Functions are also provided for spawning child processes using fork.
54  * See @ref Ecore_Exe_Basic_Group and @ref Ecore_Exe_Signal_Group for
55  * more details.
56  */
57
58 #ifdef _WIN32
59 # include <winsock2.h>
60 #elif (defined (__FreeBSD__) && (__FreeBSD_version >= 420001)) || defined (__OpenBSD__)
61 # include <sys/select.h>
62 # include <signal.h>
63 #else
64 # include <sys/time.h>
65 # include <signal.h>
66 #endif
67
68 #include <sys/types.h>
69
70 #ifdef __cplusplus
71 extern "C" {
72 #endif
73
74 #define ECORE_VERSION_MAJOR 1
75 #define ECORE_VERSION_MINOR 0
76
77    typedef struct _Ecore_Version
78      {
79         int major;
80         int minor;
81         int micro;
82         int revision;
83      } Ecore_Version;
84    
85    EAPI extern Ecore_Version *ecore_version;
86
87 #define ECORE_CALLBACK_CANCEL EINA_FALSE /**< Return value to remove a callback */
88 #define ECORE_CALLBACK_RENEW EINA_TRUE  /**< Return value to keep a callback */
89
90 #define ECORE_CALLBACK_PASS_ON EINA_TRUE /**< Return value to pass event to next handler */
91 #define ECORE_CALLBACK_DONE EINA_FALSE /**< Return value to stop event handling */
92
93 #define ECORE_EVENT_NONE            0
94 #define ECORE_EVENT_SIGNAL_USER     1 /**< User signal event */
95 #define ECORE_EVENT_SIGNAL_HUP      2 /**< Hup signal event */
96 #define ECORE_EVENT_SIGNAL_EXIT     3 /**< Exit signal event */
97 #define ECORE_EVENT_SIGNAL_POWER    4 /**< Power signal event */
98 #define ECORE_EVENT_SIGNAL_REALTIME 5 /**< Realtime signal event */
99 #define ECORE_EVENT_COUNT           6
100
101 #define ECORE_EXE_PRIORITY_INHERIT 9999
102    
103    EAPI extern int ECORE_EXE_EVENT_ADD; /**< A child process has been added */
104    EAPI extern int ECORE_EXE_EVENT_DEL; /**< A child process has been deleted (it exited, naming consistant with the rest of ecore). */
105    EAPI extern int ECORE_EXE_EVENT_DATA; /**< Data from a child process. */
106    EAPI extern int ECORE_EXE_EVENT_ERROR; /**< Errors from a child process. */
107
108    enum _Ecore_Fd_Handler_Flags
109      {
110         ECORE_FD_READ = 1, /**< Fd Read mask */
111         ECORE_FD_WRITE = 2, /**< Fd Write mask */
112         ECORE_FD_ERROR = 4 /**< Fd Error mask */
113      };
114    typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
115
116    enum _Ecore_Exe_Flags /* flags for executing a child with its stdin and/or stdout piped back */
117      {
118         ECORE_EXE_PIPE_READ = 1, /**< Exe Pipe Read mask */
119         ECORE_EXE_PIPE_WRITE = 2, /**< Exe Pipe Write mask */
120         ECORE_EXE_PIPE_ERROR = 4, /**< Exe Pipe error mask */
121         ECORE_EXE_PIPE_READ_LINE_BUFFERED = 8, /**< Reads are buffered until a newline and delivered 1 event per line */
122         ECORE_EXE_PIPE_ERROR_LINE_BUFFERED = 16, /**< Errors are buffered until a newline and delivered 1 event per line */
123         ECORE_EXE_PIPE_AUTO = 32, /**< stdout and stderr are buffered automatically */
124         ECORE_EXE_RESPAWN = 64, /**< FIXME: Exe is restarted if it dies */
125         ECORE_EXE_USE_SH = 128, /**< Use /bin/sh to run the command. */
126         ECORE_EXE_NOT_LEADER = 256 /**< Do not use setsid() to have the executed process be its own session leader */
127      };
128    typedef enum _Ecore_Exe_Flags Ecore_Exe_Flags;
129
130    enum _Ecore_Exe_Win32_Priority
131      {
132        ECORE_EXE_WIN32_PRIORITY_IDLE, /**< Idle priority, for monitoring the system */
133        ECORE_EXE_WIN32_PRIORITY_BELOW_NORMAL, /**< Below default priority */
134        ECORE_EXE_WIN32_PRIORITY_NORMAL, /**< Default priority */
135        ECORE_EXE_WIN32_PRIORITY_ABOVE_NORMAL, /**< Above default priority */
136        ECORE_EXE_WIN32_PRIORITY_HIGH, /**< High priority, use with care as other threads in the system will not get processor time */
137        ECORE_EXE_WIN32_PRIORITY_REALTIME /**< Realtime priority, should be almost never used as it can interrupt system threads that manage mouse input, keyboard input, and background disk flushing */
138      };
139    typedef enum _Ecore_Exe_Win32_Priority Ecore_Exe_Win32_Priority;
140
141    enum _Ecore_Poller_Type /* Poller types */
142      {
143         ECORE_POLLER_CORE = 0 /**< The core poller interval */
144      };
145    typedef enum _Ecore_Poller_Type Ecore_Poller_Type;
146
147    typedef struct _Ecore_Exe                   Ecore_Exe; /**< A handle for spawned processes */
148    typedef struct _Ecore_Timer                 Ecore_Timer; /**< A handle for timers */
149    typedef struct _Ecore_Idler                 Ecore_Idler; /**< A handle for idlers */
150    typedef struct _Ecore_Idle_Enterer          Ecore_Idle_Enterer; /**< A handle for idle enterers */
151    typedef struct _Ecore_Idle_Exiter           Ecore_Idle_Exiter; /**< A handle for idle exiters */
152    typedef struct _Ecore_Fd_Handler            Ecore_Fd_Handler; /**< A handle for Fd handlers */
153    typedef struct _Ecore_Win32_Handler         Ecore_Win32_Handler; /**< A handle for HANDLE handlers on Windows */
154    typedef struct _Ecore_Event_Handler         Ecore_Event_Handler; /**< A handle for an event handler */
155    typedef struct _Ecore_Event_Filter          Ecore_Event_Filter; /**< A handle for an event filter */
156    typedef struct _Ecore_Event                 Ecore_Event; /**< A handle for an event */
157    typedef struct _Ecore_Animator              Ecore_Animator; /**< A handle for animators */
158    typedef struct _Ecore_Pipe                  Ecore_Pipe; /**< A handle for pipes */
159    typedef struct _Ecore_Poller                Ecore_Poller; /**< A handle for pollers */
160    typedef struct _Ecore_Event_Signal_User     Ecore_Event_Signal_User; /**< User signal event */
161    typedef struct _Ecore_Event_Signal_Hup      Ecore_Event_Signal_Hup; /**< Hup signal event */
162    typedef struct _Ecore_Event_Signal_Exit     Ecore_Event_Signal_Exit; /**< Exit signal event */
163    typedef struct _Ecore_Event_Signal_Power    Ecore_Event_Signal_Power; /**< Power signal event */
164    typedef struct _Ecore_Event_Signal_Realtime Ecore_Event_Signal_Realtime; /**< Realtime signal event */
165    typedef struct _Ecore_Exe_Event_Add         Ecore_Exe_Event_Add; /**< Spawned Exe add event */
166    typedef struct _Ecore_Exe_Event_Del         Ecore_Exe_Event_Del; /**< Spawned Exe exit event */
167    typedef struct _Ecore_Exe_Event_Data_Line   Ecore_Exe_Event_Data_Line; /**< Lines from a child process */
168    typedef struct _Ecore_Exe_Event_Data        Ecore_Exe_Event_Data; /**< Data from a child process */
169    typedef struct _Ecore_Thread                Ecore_Thread;
170
171    /**
172     * @typedef Ecore_Data_Cb Ecore_Data_Cb
173     * A callback which is used to return data to the main function
174     */
175    typedef void *(*Ecore_Data_Cb) (void *data);
176    /**
177     * @typedef Ecore_Filter_Cb
178     * A callback used for filtering events from the main loop.
179     */
180    typedef Eina_Bool (*Ecore_Filter_Cb) (void *data, void *loop_data, int type, void *event);
181    /**
182     * @typedef Ecore_Eselect_Function Ecore_Eselect_Function
183     * A function which can be used to replace select() in the main loop
184     */
185    typedef int (*Ecore_Select_Function)(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
186    /**
187     * @typedef Ecore_End_Cb Ecore_End_Cb
188     * This is the callback which is called at the end of a function, usually for cleanup purposes.
189     */
190    typedef void (*Ecore_End_Cb) (void *user_data, void *func_data);
191    /**
192     * @typedef Ecore_Pipe_Cb Ecore_Pipe_Cb
193     * The callback that data written to the pipe is sent to.
194     */
195    typedef void (*Ecore_Pipe_Cb) (void *data, void *buffer, unsigned int nbyte);
196    /**
197     * @typedef Ecore_Exe_Cb Ecore_Exe_Cb
198     * A callback to run with the associated @ref Ecore_Exe, usually for cleanup purposes.
199     */
200    typedef void (*Ecore_Exe_Cb)(void *data, const Ecore_Exe *exe);
201    /**
202     * @typedef Ecore_Event_Handler_Cb Ecore_Event_Handler_Cb
203     * A callback used by the main loop to handle events of a specified type.
204     */
205    typedef Eina_Bool (*Ecore_Event_Handler_Cb) (void *data, int type, void *event);
206    /**
207     * @typedef Ecore_Thread_Heavy_Cb Ecore_Thread_Heavy_Cb
208     * A callback used to run cpu intensive or blocking I/O operations.
209     */
210    typedef void (*Ecore_Thread_Heavy_Cb) (Ecore_Thread *thread, void *data);
211    /**
212     * @typedef Ecore_Thread_Notify_Cb Ecore_Thread_Notify_Cb
213     * A callback used by the main loop to receive data sent by an @ref Ecore_Thread.
214     */
215    typedef void (*Ecore_Thread_Notify_Cb) (Ecore_Thread *thread, void *msg_data, void *data);
216    /**
217     * @typedef Ecore_Task_Cb Ecore_Task_Cb
218     * A callback run for a task (timer, idler, poller, animater, etc)
219     */
220    typedef Eina_Bool (*Ecore_Task_Cb) (void *data);
221    /**
222     * @typedef Ecore_Cb Ecore_Cb
223     * A generic callback called as a hook when a certain point in execution is reached.
224     */
225    typedef void (*Ecore_Cb) (void *data);
226    /**
227     * @typedef Ecore_Fd_Cb Ecore_Fd_Cb
228     * A callback used by an @ref Ecore_Fd_Handler.
229     */
230    typedef Eina_Bool (*Ecore_Fd_Cb) (void *data, Ecore_Fd_Handler *fd_handler);
231    /**
232     * @typedef Ecore_Fd_Prep_Cb Ecore_Fd_Prep_Cb
233     * A callback used by an @ref Ecore_Fd_Handler.
234     */
235    typedef void (*Ecore_Fd_Prep_Cb) (void *data, Ecore_Fd_Handler *fd_handler);
236    /**
237     * @typedef Ecore_Fd_Win32_Cb Ecore_Fd_Win32_Cb
238     * A callback used by an @ref Ecore_Win32_Handler.
239     */
240    typedef Eina_Bool (*Ecore_Fd_Win32_Cb) (void *data, Ecore_Win32_Handler *wh);
241
242
243    typedef struct _Ecore_Job Ecore_Job; /**< A job handle */
244
245    struct _Ecore_Event_Signal_User /** User signal event */
246      {
247         int   number; /**< The signal number. Either 1 or 2 */
248         void *ext_data; /**< Extension data - not used */
249
250 #ifndef _WIN32
251         siginfo_t data; /**< Signal info */
252 #endif
253      };
254
255    struct _Ecore_Event_Signal_Hup /** Hup signal event */
256      {
257         void *ext_data; /**< Extension data - not used */
258
259 #ifndef _WIN32
260         siginfo_t data; /**< Signal info */
261 #endif
262      };
263
264    struct _Ecore_Event_Signal_Exit /** Exit request event */
265      {
266         unsigned int   interrupt : 1; /**< Set if the exit request was an interrupt  signal*/
267         unsigned int   quit      : 1; /**< set if the exit request was a quit signal */
268         unsigned int   terminate : 1; /**< Set if the exit request was a terminate singal */
269         void          *ext_data;        /**< Extension data - not used */
270
271 #ifndef _WIN32
272         siginfo_t data; /**< Signal info */
273 #endif
274      };
275
276    struct _Ecore_Event_Signal_Power /** Power event */
277      {
278         void *ext_data; /**< Extension data - not used */
279
280 #ifndef _WIN32
281         siginfo_t data; /**< Signal info */
282 #endif
283      };
284
285    struct _Ecore_Event_Signal_Realtime /** Realtime event */
286      {
287         int num; /**< The realtime signal's number */
288
289 #ifndef _WIN32
290         siginfo_t data; /**< Signal info */
291 #endif
292      };
293
294    struct _Ecore_Exe_Event_Add /** Process add event */
295      {
296         Ecore_Exe *exe; /**< The handle to the added process */
297         void      *ext_data; /**< Extension data - not used */
298      };
299
300    struct _Ecore_Exe_Event_Del /** Process exit event */
301      {
302         pid_t         pid; /**< The process ID of the process that exited */
303         int           exit_code; /**< The exit code of the process */
304         Ecore_Exe    *exe; /**< The handle to the exited process, or NULL if not found */
305         int           exit_signal; /** < The signal that caused the process to exit */
306         unsigned int  exited    : 1; /** < set to 1 if the process exited of its own accord */
307         unsigned int  signalled : 1; /** < set to 1 id the process exited due to uncaught signal */
308         void         *ext_data; /**< Extension data - not used */
309 #ifndef _WIN32
310         siginfo_t     data; /**< Signal info */
311 #endif
312      };
313
314    struct _Ecore_Exe_Event_Data_Line /**< Lines from a child process */
315       {
316          char *line;
317          int   size;
318       };
319
320    struct _Ecore_Exe_Event_Data /** Data from a child process event */
321      {
322         Ecore_Exe *exe; /**< The handle to the process */
323         void *data; /**< the raw binary data from the child process that was recieved */
324         int   size; /**< the size of this data in bytes */
325         Ecore_Exe_Event_Data_Line *lines; /**< an array of line data if line buffered, the last one has it's line member set to NULL */
326      };
327
328    EAPI int  ecore_init(void);
329    EAPI int  ecore_shutdown(void);
330
331    EAPI void ecore_app_args_set(int argc, const char **argv);
332    EAPI void ecore_app_args_get(int *argc, char ***argv);
333    EAPI void ecore_app_restart(void);
334
335    EAPI Ecore_Event_Handler *ecore_event_handler_add(int type, Ecore_Event_Handler_Cb func, const void *data);
336    EAPI void                *ecore_event_handler_del(Ecore_Event_Handler *event_handler);
337    EAPI Ecore_Event         *ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, void *data);
338    EAPI void                *ecore_event_del(Ecore_Event *event);
339    EAPI int                  ecore_event_type_new(void);
340    EAPI Ecore_Event_Filter  *ecore_event_filter_add(Ecore_Data_Cb func_start, Ecore_Filter_Cb func_filter, Ecore_End_Cb func_end, const void *data);
341    EAPI void                *ecore_event_filter_del(Ecore_Event_Filter *ef);
342    EAPI int                  ecore_event_current_type_get(void);
343    EAPI void                *ecore_event_current_event_get(void);
344
345
346    EAPI void        ecore_exe_run_priority_set(int pri);
347    EAPI int         ecore_exe_run_priority_get(void);
348    EAPI Ecore_Exe  *ecore_exe_run(const char *exe_cmd, const void *data);
349    EAPI Ecore_Exe  *ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data);
350    EAPI void        ecore_exe_callback_pre_free_set(Ecore_Exe *exe, Ecore_Exe_Cb func);
351    EAPI Eina_Bool   ecore_exe_send(Ecore_Exe *exe, const void *data, int size);
352    EAPI void        ecore_exe_close_stdin(Ecore_Exe *exe);
353    EAPI void        ecore_exe_auto_limits_set(Ecore_Exe *exe, int start_bytes, int end_bytes, int start_lines, int end_lines);
354    EAPI Ecore_Exe_Event_Data *ecore_exe_event_data_get(Ecore_Exe *exe, Ecore_Exe_Flags flags);
355    EAPI void        ecore_exe_event_data_free(Ecore_Exe_Event_Data *data);
356    EAPI void       *ecore_exe_free(Ecore_Exe *exe);
357    EAPI pid_t       ecore_exe_pid_get(const Ecore_Exe *exe);
358    EAPI void        ecore_exe_tag_set(Ecore_Exe *exe, const char *tag);
359    EAPI const char *ecore_exe_tag_get(const Ecore_Exe *exe);
360    EAPI const char *ecore_exe_cmd_get(const Ecore_Exe *exe);
361    EAPI void       *ecore_exe_data_get(const Ecore_Exe *exe);
362    EAPI Ecore_Exe_Flags ecore_exe_flags_get(const Ecore_Exe *exe);
363    EAPI void        ecore_exe_pause(Ecore_Exe *exe);
364    EAPI void        ecore_exe_continue(Ecore_Exe *exe);
365    EAPI void        ecore_exe_interrupt(Ecore_Exe *exe);
366    EAPI void        ecore_exe_quit(Ecore_Exe *exe);
367    EAPI void        ecore_exe_terminate(Ecore_Exe *exe);
368    EAPI void        ecore_exe_kill(Ecore_Exe *exe);
369    EAPI void        ecore_exe_signal(Ecore_Exe *exe, int num);
370    EAPI void        ecore_exe_hup(Ecore_Exe *exe);
371
372    EAPI Ecore_Idler *ecore_idler_add(Ecore_Task_Cb func, const void *data);
373    EAPI void        *ecore_idler_del(Ecore_Idler *idler);
374
375    EAPI Ecore_Idle_Enterer *ecore_idle_enterer_add(Ecore_Task_Cb func, const void *data);
376    EAPI Ecore_Idle_Enterer *ecore_idle_enterer_before_add(Ecore_Task_Cb func, const void *data);
377    EAPI void               *ecore_idle_enterer_del(Ecore_Idle_Enterer *idle_enterer);
378
379    EAPI Ecore_Idle_Exiter *ecore_idle_exiter_add(Ecore_Task_Cb func, const void *data);
380    EAPI void              *ecore_idle_exiter_del(Ecore_Idle_Exiter *idle_exiter);
381
382    EAPI void              ecore_main_loop_iterate(void);
383
384    EAPI void              ecore_main_loop_select_func_set(Ecore_Select_Function func);
385    EAPI void             *ecore_main_loop_select_func_get(void);
386
387    EAPI Eina_Bool         ecore_main_loop_glib_integrate(void);
388    EAPI void              ecore_main_loop_glib_always_integrate_disable(void);
389        
390    EAPI void              ecore_main_loop_begin(void);
391    EAPI void              ecore_main_loop_quit(void);
392    EAPI Ecore_Fd_Handler *ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, Ecore_Fd_Cb func, const void *data,
393                                                     Ecore_Fd_Cb buf_func, const void *buf_data);
394    EAPI void              ecore_main_fd_handler_prepare_callback_set(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Prep_Cb func, const void *data);
395    EAPI void             *ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler);
396    EAPI int               ecore_main_fd_handler_fd_get(Ecore_Fd_Handler *fd_handler);
397    EAPI int               ecore_main_fd_handler_active_get(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_Flags flags);
398    EAPI void              ecore_main_fd_handler_active_set(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_Flags flags);
399
400    EAPI Ecore_Win32_Handler *ecore_main_win32_handler_add(void *h, Ecore_Fd_Win32_Cb func, const void *data);
401    EAPI void                *ecore_main_win32_handler_del(Ecore_Win32_Handler *win32_handler);
402
403    EAPI Ecore_Pipe  *ecore_pipe_add(Ecore_Pipe_Cb handler, const void *data);
404    EAPI void        *ecore_pipe_del(Ecore_Pipe *p);
405    EAPI Eina_Bool    ecore_pipe_write(Ecore_Pipe *p, const void *buffer, unsigned int nbytes);
406    EAPI void         ecore_pipe_write_close(Ecore_Pipe *p);
407    EAPI void         ecore_pipe_read_close(Ecore_Pipe *p);
408
409
410
411    EAPI Ecore_Thread *ecore_thread_run(Ecore_Cb,
412                                        Ecore_Cb,
413                                        Ecore_Cb,
414                                        const void *data);
415    EAPI Ecore_Thread *ecore_long_run(Ecore_Thread_Heavy_Cb,
416                                      Ecore_Thread_Notify_Cb,
417                                      Ecore_Cb,
418                                      Ecore_Cb,
419                                      const void *data,
420                                      Eina_Bool try_no_queue);
421    EAPI Eina_Bool     ecore_thread_cancel(Ecore_Thread *thread);
422    EAPI Eina_Bool     ecore_thread_check(Ecore_Thread *thread);
423    EAPI Eina_Bool     ecore_thread_notify(Ecore_Thread *thread, const void *msg_data);
424    EAPI int           ecore_thread_active_get(void);
425    EAPI int           ecore_thread_pending_get(void);
426    EAPI int           ecore_thread_pending_long_get(void);
427    EAPI int           ecore_thread_pending_total_get(void);
428    EAPI int           ecore_thread_max_get(void);
429    EAPI void          ecore_thread_max_set(int num);
430    EAPI void          ecore_thread_max_reset(void);
431    EAPI int           ecore_thread_available_get(void);
432
433    EAPI Eina_Bool     ecore_thread_local_data_add(Ecore_Thread *thread, const char *key, void *value, Eina_Free_Cb cb, Eina_Bool direct);
434    EAPI void         *ecore_thread_local_data_set(Ecore_Thread *thread, const char *key, void *value, Eina_Free_Cb cb);
435    EAPI void   *ecore_thread_local_data_find(Ecore_Thread *thread, const char *key);
436    EAPI Eina_Bool     ecore_thread_local_data_del(Ecore_Thread *thread, const char *key);
437
438    EAPI Eina_Bool     ecore_thread_global_data_add(const char *key, void *value, Eina_Free_Cb cb, Eina_Bool direct);
439    EAPI void         *ecore_thread_global_data_set(const char *key, void *value, Eina_Free_Cb cb);
440    EAPI void   *ecore_thread_global_data_find(const char *key);
441    EAPI Eina_Bool     ecore_thread_global_data_del(const char *key);
442    EAPI void   *ecore_thread_global_data_wait(const char *key, double seconds);
443
444
445
446
447    EAPI double ecore_time_get(void);
448    EAPI double ecore_loop_time_get(void);
449
450    EAPI Ecore_Timer *ecore_timer_add(double in, Ecore_Task_Cb func, const void *data);
451    EAPI Ecore_Timer *ecore_timer_loop_add(double in, Ecore_Task_Cb func, const void *data);
452    EAPI void        *ecore_timer_del(Ecore_Timer *timer);
453    EAPI void         ecore_timer_interval_set(Ecore_Timer *timer, double in);
454    EAPI double       ecore_timer_interval_get(Ecore_Timer *timer);
455    EAPI void         ecore_timer_freeze(Ecore_Timer *timer);
456    EAPI void         ecore_timer_thaw(Ecore_Timer *timer);
457    EAPI void         ecore_timer_delay(Ecore_Timer *timer, double add);
458    EAPI double       ecore_timer_pending_get(Ecore_Timer *timer);
459
460    EAPI double       ecore_timer_precision_get(void);
461    EAPI void         ecore_timer_precision_set(double precision);
462
463    EAPI Ecore_Animator *ecore_animator_add(Ecore_Task_Cb func, const void *data);
464    EAPI void           *ecore_animator_del(Ecore_Animator *animator);
465    EAPI void            ecore_animator_freeze(Ecore_Animator *animator);
466    EAPI void            ecore_animator_thaw(Ecore_Animator *animator);
467    EAPI void            ecore_animator_frametime_set(double frametime);
468    EAPI double          ecore_animator_frametime_get(void);
469
470    EAPI void          ecore_poller_poll_interval_set(Ecore_Poller_Type type, double poll_time);
471    EAPI double        ecore_poller_poll_interval_get(Ecore_Poller_Type type);
472    EAPI Eina_Bool     ecore_poller_poller_interval_set(Ecore_Poller *poller, int interval);
473    EAPI int           ecore_poller_poller_interval_get(Ecore_Poller *poller);
474    EAPI Ecore_Poller *ecore_poller_add(Ecore_Poller_Type type, int interval, Ecore_Task_Cb func, const void *data);
475    EAPI void         *ecore_poller_del(Ecore_Poller *poller);
476
477    EAPI Ecore_Job *ecore_job_add(Ecore_Cb func, const void *data);
478    EAPI void      *ecore_job_del(Ecore_Job *job);
479
480 #ifdef __cplusplus
481 }
482 #endif
483 #endif