9 # ifdef EFL_ECORE_BUILD
11 # define EAPI __declspec(dllexport)
14 # endif /* ! DLL_EXPORT */
16 # define EAPI __declspec(dllimport)
17 # endif /* ! EFL_ECORE_BUILD */
21 # define EAPI __attribute__ ((visibility("default")))
32 * @brief The file that provides the program utility, main loop and timer
35 * This header provides the Ecore event handling loop. For more
36 * details, see @ref Ecore_Main_Loop_Group.
38 * For the main loop to be of any use, you need to be able to add events
39 * and event handlers. Events for file descriptor events are covered in
40 * @ref Ecore_FD_Handler_Group.
42 * Time functions are covered in @ref Ecore_Time_Group.
44 * There is also provision for callbacks for when the loop enters or
45 * exits an idle state. See @ref Idle_Group for more information.
47 * Functions are also provided for spawning child processes using fork.
48 * See @ref Ecore_Exe_Basic_Group and @ref Ecore_Exe_Signal_Group for
52 #ifndef _ECORE_PRIVATE_H
53 #include <sys/types.h>
69 #define ECORE_CALLBACK_CANCEL 0 /**< Return value to remove a callback */
70 #define ECORE_CALLBACK_RENEW 1 /**< Return value to keep a callback */
72 #define ECORE_EVENT_NONE 0
73 #define ECORE_EVENT_SIGNAL_USER 1 /**< User signal event */
74 #define ECORE_EVENT_SIGNAL_HUP 2 /**< Hup signal event */
75 #define ECORE_EVENT_SIGNAL_EXIT 3 /**< Exit signal event */
76 #define ECORE_EVENT_SIGNAL_POWER 4 /**< Power signal event */
77 #define ECORE_EVENT_SIGNAL_REALTIME 5 /**< Realtime signal event */
78 #define ECORE_EVENT_COUNT 6
80 EAPI extern int ECORE_EXE_EVENT_ADD; /**< A child process has been added */
81 EAPI extern int ECORE_EXE_EVENT_DEL; /**< A child process has been deleted (it exited, naming consistant with the rest of ecore). */
82 EAPI extern int ECORE_EXE_EVENT_DATA; /**< Data from a child process. */
83 EAPI extern int ECORE_EXE_EVENT_ERROR; /**< Errors from a child process. */
85 #ifndef _ECORE_PRIVATE_H
86 enum _Ecore_Fd_Handler_Flags
88 ECORE_FD_READ = 1, /**< Fd Read mask */
89 ECORE_FD_WRITE = 2, /**< Fd Write mask */
90 ECORE_FD_ERROR = 4 /**< Fd Error mask */
92 typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags;
94 enum _Ecore_Exe_Flags /* flags for executing a child with its stdin and/or stdout piped back */
96 ECORE_EXE_PIPE_READ = 1, /**< Exe Pipe Read mask */
97 ECORE_EXE_PIPE_WRITE = 2, /**< Exe Pipe Write mask */
98 ECORE_EXE_PIPE_ERROR = 4, /**< Exe Pipe error mask */
99 ECORE_EXE_PIPE_READ_LINE_BUFFERED = 8, /**< Reads are buffered until a newline and delivered 1 event per line */
100 ECORE_EXE_PIPE_ERROR_LINE_BUFFERED = 16, /**< Errors are buffered until a newline and delivered 1 event per line */
101 ECORE_EXE_PIPE_AUTO = 32, /**< stdout and stderr are buffered automatically */
102 ECORE_EXE_RESPAWN = 64, /**< FIXME: Exe is restarted if it dies */
103 ECORE_EXE_USE_SH = 128, /**< Use /bin/sh to run the command. */
104 ECORE_EXE_NOT_LEADER = 256 /**< Do not use setsid() to have the executed process be its own session leader */
106 typedef enum _Ecore_Exe_Flags Ecore_Exe_Flags;
108 enum _Ecore_Poller_Type /* Poller types */
110 ECORE_POLLER_CORE = 0 /**< The core poller interval */
112 typedef enum _Ecore_Poller_Type Ecore_Poller_Type;
115 typedef void Ecore_Exe; /**< A handle for spawned processes */
117 typedef void Ecore_Timer; /**< A handle for timers */
118 typedef void Ecore_Idler; /**< A handle for idlers */
119 typedef void Ecore_Idle_Enterer; /**< A handle for idle enterers */
120 typedef void Ecore_Idle_Exiter; /**< A handle for idle exiters */
121 typedef void Ecore_Fd_Handler; /**< A handle for Fd hanlders */
122 typedef void Ecore_Event_Handler; /**< A handle for an event handler */
123 typedef void Ecore_Event_Filter; /**< A handle for an event filter */
124 typedef void Ecore_Event; /**< A handle for an event */
125 typedef void Ecore_Animator; /**< A handle for animators */
126 typedef void Ecore_Poller; /**< A handle for pollers */
128 typedef struct _Ecore_Event_Signal_User Ecore_Event_Signal_User; /**< User signal event */
129 typedef struct _Ecore_Event_Signal_Hup Ecore_Event_Signal_Hup; /**< Hup signal event */
130 typedef struct _Ecore_Event_Signal_Exit Ecore_Event_Signal_Exit; /**< Exit signal event */
131 typedef struct _Ecore_Event_Signal_Power Ecore_Event_Signal_Power; /**< Power signal event */
132 typedef struct _Ecore_Event_Signal_Realtime Ecore_Event_Signal_Realtime; /**< Realtime signal event */
133 typedef struct _Ecore_Exe_Event_Add Ecore_Exe_Event_Add; /**< Spawned Exe add event */
134 typedef struct _Ecore_Exe_Event_Del Ecore_Exe_Event_Del; /**< Spawned Exe exit event */
135 typedef struct _Ecore_Exe_Event_Data_Line Ecore_Exe_Event_Data_Line; /**< Lines from a child process */
136 typedef struct _Ecore_Exe_Event_Data Ecore_Exe_Event_Data; /**< Data from a child process */
138 struct _Ecore_Event_Signal_User /** User signal event */
140 int number; /**< The signal number. Either 1 or 2 */
141 void *ext_data; /**< Extension data - not used */
144 siginfo_t data; /**< Signal info */
148 struct _Ecore_Event_Signal_Hup /** Hup signal event */
150 void *ext_data; /**< Extension data - not used */
153 siginfo_t data; /**< Signal info */
157 struct _Ecore_Event_Signal_Exit /** Exit request event */
159 unsigned int interrupt : 1; /**< Set if the exit request was an interrupt signal*/
160 unsigned int quit : 1; /**< set if the exit request was a quit signal */
161 unsigned int terminate : 1; /**< Set if the exit request was a terminate singal */
162 void *ext_data; /**< Extension data - not used */
165 siginfo_t data; /**< Signal info */
169 struct _Ecore_Event_Signal_Power /** Power event */
171 void *ext_data; /**< Extension data - not used */
174 siginfo_t data; /**< Signal info */
178 struct _Ecore_Event_Signal_Realtime /** Realtime event */
180 int num; /**< The realtime signal's number */
183 siginfo_t data; /**< Signal info */
188 struct _Ecore_Exe_Event_Add /** Process add event */
190 Ecore_Exe *exe; /**< The handle to the added process */
191 void *ext_data; /**< Extension data - not used */
194 struct _Ecore_Exe_Event_Del /** Process exit event */
196 pid_t pid; /**< The process ID of the process that exited */
197 int exit_code; /**< The exit code of the process */
198 Ecore_Exe *exe; /**< The handle to the exited process, or NULL if not found */
199 int exit_signal; /** < The signal that caused the process to exit */
200 unsigned int exited : 1; /** < set to 1 if the process exited of its own accord */
201 unsigned int signalled : 1; /** < set to 1 id the process exited due to uncaught signal */
202 void *ext_data; /**< Extension data - not used */
203 siginfo_t data; /**< Signal info */
206 struct _Ecore_Exe_Event_Data_Line /**< Lines from a child process */
212 struct _Ecore_Exe_Event_Data /** Data from a child process event */
214 Ecore_Exe *exe; /**< The handle to the process */
215 void *data; /**< the raw binary data from the child process that was recieved */
216 int size; /**< the size of this data in bytes */
217 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 */
221 EAPI int ecore_init(void);
222 EAPI int ecore_shutdown(void);
224 EAPI void ecore_app_args_set(int argc, const char **argv);
225 EAPI void ecore_app_args_get(int *argc, char ***argv);
226 EAPI void ecore_app_restart(void);
228 EAPI Ecore_Event_Handler *ecore_event_handler_add(int type, int (*func) (void *data, int type, void *event), const void *data);
229 EAPI void *ecore_event_handler_del(Ecore_Event_Handler *event_handler);
230 EAPI Ecore_Event *ecore_event_add(int type, void *ev, void (*func_free) (void *data, void *ev), void *data);
231 EAPI void *ecore_event_del(Ecore_Event *event);
232 EAPI int ecore_event_type_new(void);
233 EAPI Ecore_Event_Filter *ecore_event_filter_add(void * (*func_start) (void *data), int (*func_filter) (void *data, void *loop_data, int type, void *event), void (*func_end) (void *data, void *loop_data), const void *data);
234 EAPI void *ecore_event_filter_del(Ecore_Event_Filter *ef);
235 EAPI int ecore_event_current_type_get(void);
236 EAPI void *ecore_event_current_event_get(void);
240 EAPI Ecore_Exe *ecore_exe_run(const char *exe_cmd, const void *data);
241 EAPI Ecore_Exe *ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data);
242 EAPI int ecore_exe_send(Ecore_Exe *exe, void *data, int size);
243 EAPI void ecore_exe_close_stdin(Ecore_Exe *exe);
244 EAPI void ecore_exe_auto_limits_set(Ecore_Exe *exe, int start_bytes, int end_bytes, int start_lines, int end_lines);
245 EAPI Ecore_Exe_Event_Data *ecore_exe_event_data_get(Ecore_Exe *exe, Ecore_Exe_Flags flags);
246 EAPI void ecore_exe_event_data_free(Ecore_Exe_Event_Data *data);
247 EAPI void *ecore_exe_free(Ecore_Exe *exe);
248 EAPI pid_t ecore_exe_pid_get(Ecore_Exe *exe);
249 EAPI void ecore_exe_tag_set(Ecore_Exe *exe, const char *tag);
250 EAPI char *ecore_exe_tag_get(Ecore_Exe *exe);
251 EAPI char *ecore_exe_cmd_get(Ecore_Exe *exe);
252 EAPI void *ecore_exe_data_get(Ecore_Exe *exe);
253 EAPI void ecore_exe_pause(Ecore_Exe *exe);
254 EAPI void ecore_exe_continue(Ecore_Exe *exe);
255 EAPI void ecore_exe_interrupt(Ecore_Exe *exe);
256 EAPI void ecore_exe_quit(Ecore_Exe *exe);
257 EAPI void ecore_exe_terminate(Ecore_Exe *exe);
258 EAPI void ecore_exe_kill(Ecore_Exe *exe);
259 EAPI void ecore_exe_signal(Ecore_Exe *exe, int num);
260 EAPI void ecore_exe_hup(Ecore_Exe *exe);
263 EAPI Ecore_Idler *ecore_idler_add(int (*func) (void *data), const void *data);
264 EAPI void *ecore_idler_del(Ecore_Idler *idler);
266 EAPI Ecore_Idle_Enterer *ecore_idle_enterer_add(int (*func) (void *data), const void *data);
267 EAPI Ecore_Idle_Enterer *ecore_idle_enterer_before_add(int (*func) (void *data), const void *data);
268 EAPI void *ecore_idle_enterer_del(Ecore_Idle_Enterer *idle_enterer);
270 EAPI Ecore_Idle_Exiter *ecore_idle_exiter_add(int (*func) (void *data), const void *data);
271 EAPI void *ecore_idle_exiter_del(Ecore_Idle_Exiter *idle_exiter);
273 EAPI void ecore_main_loop_iterate(void);
274 EAPI void ecore_main_loop_begin(void);
275 EAPI void ecore_main_loop_quit(void);
276 EAPI Ecore_Fd_Handler *ecore_main_fd_handler_add(int fd, Ecore_Fd_Handler_Flags flags, int (*func) (void *data, Ecore_Fd_Handler *fd_handler), const void *data, int (*buf_func) (void *buf_data, Ecore_Fd_Handler *fd_handler), const void *buf_data);
277 EAPI void ecore_main_fd_handler_prepare_callback_set(Ecore_Fd_Handler *fd_handler, void (*func) (void *data, Ecore_Fd_Handler *fd_handler), const void *data);
278 EAPI void *ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler);
279 EAPI int ecore_main_fd_handler_fd_get(Ecore_Fd_Handler *fd_handler);
280 EAPI int ecore_main_fd_handler_active_get(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_Flags flags);
281 EAPI void ecore_main_fd_handler_active_set(Ecore_Fd_Handler *fd_handler, Ecore_Fd_Handler_Flags flags);
283 EAPI double ecore_time_get(void);
285 EAPI Ecore_Timer *ecore_timer_add(double in, int (*func) (void *data), const void *data);
286 EAPI void *ecore_timer_del(Ecore_Timer *timer);
287 EAPI void ecore_timer_interval_set(Ecore_Timer *timer, double in);
288 EAPI void ecore_timer_freeze(Ecore_Timer *timer);
289 EAPI void ecore_timer_thaw(Ecore_Timer *timer);
290 EAPI void ecore_timer_delay(Ecore_Timer *timer, double add);
291 EAPI double ecore_timer_pending_get(Ecore_Timer *timer);
293 EAPI Ecore_Animator *ecore_animator_add(int (*func) (void *data), const void *data);
294 EAPI void *ecore_animator_del(Ecore_Animator *animator);
295 EAPI void ecore_animator_frametime_set(double frametime);
296 EAPI double ecore_animator_frametime_get(void);
298 EAPI void ecore_poller_poll_interval_set(Ecore_Poller_Type type, double poll_time);
299 EAPI double ecore_poller_poll_interval_get(Ecore_Poller_Type type);
300 EAPI Ecore_Poller *ecore_poller_add(Ecore_Poller_Type type, int interval, int (*func) (void *data), const void *data);
301 EAPI void *ecore_poller_del(Ecore_Poller *poller);