[SVN's EFL Migration] ecore in SLP is merged with SVN r55371.
[profile/ivi/ecore.git] / src / lib / ecore_x / xlib / ecore_x_private.h
1 #ifndef _ECORE_X_PRIVATE_H
2 #define _ECORE_X_PRIVATE_H
3
4 #include <sys/param.h>
5 #ifndef MAXHOSTNAMELEN
6 #define MAXHOSTNAMELEN 256
7 #endif /* ifndef MAXHOSTNAMELEN */
8
9 #include <X11/Xlib.h>
10 #include <X11/Xproto.h>
11 #include <X11/Xutil.h>
12 #include <X11/Xatom.h>
13 #include <X11/Xresource.h>
14 #include <X11/keysymdef.h>
15 #include <X11/extensions/XShm.h>
16 #include <X11/extensions/shape.h>
17 #include <X11/extensions/sync.h>
18 #include <X11/extensions/dpms.h>
19 #ifdef ECORE_XCURSOR
20 #include <X11/Xcursor/Xcursor.h>
21 #endif /* ifdef ECORE_XCURSOR */
22 #ifdef ECORE_XPRINT
23 #include <X11/extensions/Print.h>
24 #endif /* ifdef ECORE_XPRINT */
25 #ifdef ECORE_XINERAMA
26 #include <X11/extensions/Xinerama.h>
27 #endif /* ifdef ECORE_XINERAMA */
28 #ifdef ECORE_XRANDR
29 #include <X11/extensions/Xrandr.h>
30 #endif /* ifdef ECORE_XRANDR */
31 #ifdef ECORE_XSS
32 #include <X11/extensions/scrnsaver.h>
33 #endif /* ifdef ECORE_XSS */
34 #ifdef ECORE_XRENDER
35 #include <X11/extensions/Xrender.h>
36 #endif /* ifdef ECORE_XRENDER */
37 #ifdef ECORE_XFIXES
38 #include <X11/extensions/Xfixes.h>
39 #endif /* ifdef ECORE_XFIXES */
40 #ifdef ECORE_XCOMPOSITE
41 #include <X11/extensions/Xcomposite.h>
42 #endif /* ifdef ECORE_XCOMPOSITE */
43 #ifdef ECORE_XDAMAGE
44 #include <X11/extensions/Xdamage.h>
45 #endif /* ifdef ECORE_XDAMAGE */
46 #ifdef ECORE_XDPMS
47 #include <X11/extensions/dpms.h>
48 #endif /* ifdef ECORE_XDPMS */
49 #ifdef ECORE_XKB
50 #include <X11/XKBlib.h>
51 #endif /* ifdef ECORE_XKB */
52 #ifdef ECORE_XI2
53 #include <X11/extensions/XInput2.h>
54 #endif /* ifdef ECORE_XI2 */
55
56 #ifndef XK_MISCELLANY
57 # define XK_MISCELLANY  1
58 #endif
59
60 #include "Ecore.h"
61 #include "ecore_private.h"
62 #include "Ecore_X.h"
63 #include "Ecore_Input.h"
64
65 extern int _ecore_xlib_log_dom;
66 #ifdef ECORE_XLIB_DEFAULT_LOG_COLOR
67 # undef ECORE_XLIB_DEFAULT_LOG_COLOR
68 #endif /* ifdef ECORE_XLIB_DEFAULT_LOG_COLOR */
69 #define ECORE_XLIB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
70
71 #ifdef ERR
72 # undef ERR
73 #endif /* ifdef ERR */
74 #define ERR(...) EINA_LOG_DOM_ERR(_ecore_xlib_log_dom, __VA_ARGS__)
75
76 #ifdef DBG
77 # undef DBG
78 #endif /* ifdef DBG */
79 #define DBG(...) EINA_LOG_DOM_DBG(_ecore_xlib_log_dom, __VA_ARGS__)
80
81 #ifdef INF
82 # undef INF
83 #endif /* ifdef INF */
84 #define INF(...) EINA_LOG_DOM_INFO(_ecore_xlib_log_dom, __VA_ARGS__)
85
86 #ifdef WRN
87 # undef WRN
88 #endif /* ifdef WRN */
89 #define WRN(...) EINA_LOG_DOM_WARN(_ecore_xlib_log_dom, __VA_ARGS__)
90
91 #ifdef CRIT
92 # undef CRIT
93 #endif /* ifdef CRIT */
94 #define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_xlib_log_dom, __VA_ARGS__)
95
96 typedef struct _Ecore_X_Selection_Intern   Ecore_X_Selection_Intern;
97
98 struct _Ecore_X_Selection_Intern
99 {
100    Ecore_X_Window win;
101    Ecore_X_Atom   selection;
102    unsigned char *data;
103    int            length;
104    Time           time;
105 };
106
107 typedef struct _Ecore_X_Selection_Converter   Ecore_X_Selection_Converter;
108
109 struct _Ecore_X_Selection_Converter
110 {
111    Ecore_X_Atom                 target;
112    Eina_Bool                  (*convert)(char *target, void *data, int size,
113                                          void **data_ret, int *size_ret,
114                                          Ecore_X_Atom *type, int *typeseize);
115    Ecore_X_Selection_Converter *next;
116 };
117
118 typedef struct _Ecore_X_Selection_Parser   Ecore_X_Selection_Parser;
119
120 struct _Ecore_X_Selection_Parser
121 {
122    char                     *target;
123    void                     *(*parse)(const char *target, void *data, int size, int format);
124    Ecore_X_Selection_Parser *next;
125 };
126
127 typedef struct _Ecore_X_DND_Source
128 {
129    int            version;
130    Ecore_X_Window win, dest;
131
132    enum {
133       ECORE_X_DND_SOURCE_IDLE,
134       ECORE_X_DND_SOURCE_DRAGGING,
135       ECORE_X_DND_SOURCE_DROPPED,
136       ECORE_X_DND_SOURCE_CONVERTING
137    } state;
138
139    struct
140    {
141       short          x, y;
142       unsigned short width, height;
143    } rectangle;
144
145    struct
146    {
147       Ecore_X_Window window;
148       int            x, y;
149    } prev;
150
151    Time         time;
152
153    Ecore_X_Atom action, accepted_action;
154
155    int          will_accept;
156    int          suppress;
157
158    int          await_status;
159 } Ecore_X_DND_Source;
160
161 typedef struct _Ecore_X_DND_Target
162 {
163    int            version;
164    Ecore_X_Window win, source;
165
166    enum {
167       ECORE_X_DND_TARGET_IDLE,
168       ECORE_X_DND_TARGET_ENTERED
169    } state;
170
171    struct
172    {
173       int x, y;
174    } pos;
175
176    Time         time;
177
178    Ecore_X_Atom action, accepted_action;
179
180    int          will_accept;
181 } Ecore_X_DND_Target;
182
183 extern int ECORE_X_MODIFIER_SHIFT;
184 extern int ECORE_X_MODIFIER_CTRL;
185 extern int ECORE_X_MODIFIER_ALT;
186 extern int ECORE_X_MODIFIER_WIN;
187
188 extern int ECORE_X_LOCK_SCROLL;
189 extern int ECORE_X_LOCK_NUM;
190 extern int ECORE_X_LOCK_CAPS;
191
192 extern Display *_ecore_x_disp;
193 extern double _ecore_x_double_click_time;
194 extern Time _ecore_x_event_last_time;
195 extern Window _ecore_x_event_last_win;
196 extern int _ecore_x_event_last_root_x;
197 extern int _ecore_x_event_last_root_y;
198 extern Eina_Bool _ecore_x_xcursor;
199 extern XIC _ecore_x_ic;
200
201 extern Ecore_X_Atom _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
202
203 extern int _ecore_window_grabs_num;
204 extern Window *_ecore_window_grabs;
205 extern Eina_Bool (*_ecore_window_grab_replay_func)(void *data, int event_type,
206                                                    void *event);
207 extern void *_ecore_window_grab_replay_data;
208
209 extern Ecore_X_Window _ecore_x_private_win;
210
211 void                      _ecore_x_error_handler_init(void);
212 void                      _ecore_x_event_handle_any_event(XEvent *xevent);
213 void                      _ecore_x_event_handle_key_press(XEvent *xevent);
214 void                      _ecore_x_event_handle_key_release(XEvent *xevent);
215 void                      _ecore_x_event_handle_button_press(XEvent *xevent);
216 void                      _ecore_x_event_handle_button_release(XEvent *xevent);
217 void                      _ecore_x_event_handle_motion_notify(XEvent *xevent);
218 void                      _ecore_x_event_handle_enter_notify(XEvent *xevent);
219 void                      _ecore_x_event_handle_leave_notify(XEvent *xevent);
220 void                      _ecore_x_event_handle_focus_in(XEvent *xevent);
221 void                      _ecore_x_event_handle_focus_out(XEvent *xevent);
222 void                      _ecore_x_event_handle_keymap_notify(XEvent *xevent);
223 void                      _ecore_x_event_handle_expose(XEvent *xevent);
224 void                      _ecore_x_event_handle_graphics_expose(XEvent *xevent);
225 void                      _ecore_x_event_handle_visibility_notify(
226    XEvent *xevent);
227 void                      _ecore_x_event_handle_create_notify(XEvent *xevent);
228 void                      _ecore_x_event_handle_destroy_notify(XEvent *xevent);
229 void                      _ecore_x_event_handle_unmap_notify(XEvent *xevent);
230 void                      _ecore_x_event_handle_map_notify(XEvent *xevent);
231 void                      _ecore_x_event_handle_map_request(XEvent *xevent);
232 void                      _ecore_x_event_handle_reparent_notify(XEvent *xevent);
233 void                      _ecore_x_event_handle_configure_notify(XEvent *xevent);
234 void                      _ecore_x_event_handle_configure_request(
235    XEvent *xevent);
236 void                      _ecore_x_event_handle_gravity_notify(XEvent *xevent);
237 void                      _ecore_x_event_handle_resize_request(XEvent *xevent);
238 void                      _ecore_x_event_handle_circulate_notify(XEvent *xevent);
239 void                      _ecore_x_event_handle_circulate_request(
240    XEvent *xevent);
241 void                      _ecore_x_event_handle_property_notify(XEvent *xevent);
242 void                      _ecore_x_event_handle_selection_clear(XEvent *xevent);
243 void                      _ecore_x_event_handle_selection_request(
244    XEvent *xevent);
245 void                      _ecore_x_event_handle_selection_notify(XEvent *xevent);
246 void                      _ecore_x_event_handle_colormap_notify(XEvent *xevent);
247 void                      _ecore_x_event_handle_client_message(XEvent *xevent);
248 void                      _ecore_x_event_handle_mapping_notify(XEvent *xevent);
249 void                      _ecore_x_event_handle_shape_change(XEvent *xevent);
250 void                      _ecore_x_event_handle_screensaver_notify(
251    XEvent *xevent);
252 void                      _ecore_x_event_handle_sync_counter(XEvent *xevent);
253 void                      _ecore_x_event_handle_sync_alarm(XEvent *xevent);
254 #ifdef ECORE_XRANDR
255 void                      _ecore_x_event_handle_randr_change(XEvent *xevent);
256 void                      _ecore_x_event_handle_randr_notify(XEvent *xevent);
257 #endif /* ifdef ECORE_XRANDR */
258 #ifdef ECORE_XFIXES
259 void                      _ecore_x_event_handle_fixes_selection_notify(
260    XEvent *xevent);
261 #endif /* ifdef ECORE_XFIXES */
262 #ifdef ECORE_XDAMAGE
263 void                      _ecore_x_event_handle_damage_notify(XEvent *xevent);
264 #endif /* ifdef ECORE_XDAMAGE */
265 void                      _ecore_x_event_handle_generic_event(XEvent *xevent);
266
267 void                      _ecore_x_selection_data_init(void);
268 void                      _ecore_x_selection_shutdown(void);
269 Ecore_X_Atom
270                           _ecore_x_selection_target_atom_get(const char *target);
271 char *                    _ecore_x_selection_target_get(Ecore_X_Atom target);
272 Ecore_X_Selection_Intern *
273                           _ecore_x_selection_get(Ecore_X_Atom selection);
274 Eina_Bool                 _ecore_x_selection_set(Window             w,
275                                                        const void  *data,
276                                                        int          len,
277                                                        Ecore_X_Atom selection);
278 int                       _ecore_x_selection_convert(Ecore_X_Atom        selection,
279                                                            Ecore_X_Atom  target,
280                                                            void        **data_ret,
281                                                            Ecore_X_Atom *targettype,
282                                                            int          *targetsize);
283 void *                    _ecore_x_selection_parse(const char *target,
284                                                          void *data,
285                                                          int   size,
286                                                          int   format);
287
288 void                      _ecore_x_sync_magic_send(int val, Ecore_X_Window swin);
289 void                      _ecore_x_window_grab_remove(Ecore_X_Window win);
290 void                      _ecore_x_key_grab_remove(Ecore_X_Window win);
291
292 /* from dnd */
293 void                      _ecore_x_dnd_init(void);
294 Ecore_X_DND_Source *      _ecore_x_dnd_source_get(void);
295 Ecore_X_DND_Target *      _ecore_x_dnd_target_get(void);
296 void                      _ecore_x_dnd_drag(Ecore_X_Window root, int x, int y);
297 void                      _ecore_x_dnd_shutdown(void);
298
299 /* from netwm */
300 Ecore_X_Window_State      _ecore_x_netwm_state_get(Ecore_X_Atom a);
301 int                       _ecore_x_netwm_startup_info_begin(Ecore_X_Window win,
302                                                                   char    *data);
303 int                       _ecore_x_netwm_startup_info(Ecore_X_Window win,
304                                                             char    *data);
305
306 /* Fixes * Damage * Composite * DPMS */
307 void                      _ecore_x_fixes_init(void);
308 void                      _ecore_x_damage_init(void);
309 void                      _ecore_x_composite_init(void);
310 void                      _ecore_x_dpms_init(void);
311 void                      _ecore_x_randr_init(void);
312
313 void                      _ecore_x_atoms_init(void);
314
315 extern int _ecore_x_xi2_opcode;
316
317 void                      _ecore_x_input_init(void);
318 void                      _ecore_x_input_shutdown(void);
319 void                      _ecore_x_input_handler(XEvent *xevent);
320 /* from sync */
321
322 void                      _ecore_mouse_move(unsigned int       timestamp,
323                                                   unsigned int xmodifiers,
324                                                   int          x,
325                                                   int          y,
326                                                   int          x_root,
327                                                   int          y_root,
328                                                   unsigned int event_window,
329                                                   unsigned int window,
330                                                   unsigned int root_win,
331                                                   int          same_screen,
332                                                   int          dev,
333                                                   double       radx,
334                                                   double       rady,
335                                                   double       pressure,
336                                                   double       angle,
337                                                   double       mx,
338                                                   double       my,
339                                                   double       mrx,
340                                                   double       mry);
341 Ecore_Event_Mouse_Button *    _ecore_mouse_button(int          event,
342                                                   unsigned int timestamp,
343                                                   unsigned int xmodifiers,
344                                                   unsigned int buttons,
345                                                   int          x,
346                                                   int          y,
347                                                   int          x_root,
348                                                   int          y_root,
349                                                   unsigned int event_window,
350                                                   unsigned int window,
351                                                   unsigned int root_win,
352                                                   int          same_screen,
353                                                   int          dev,
354                                                   double       radx,
355                                                   double       rady,
356                                                   double       pressure,
357                                                   double       angle,
358                                                   double       mx,
359                                                   double       my,
360                                                   double       mrx,
361                                                   double       mry);
362
363 //#define LOGFNS 1
364
365 #ifdef LOGFNS
366 #include <stdio.h>
367 #define LOGFN(fl, ln, fn) printf("-ECORE-X: %25s: %5i - %s\n", fl, ln, fn);
368 #else /* ifdef LOGFNS */
369 #define LOGFN(fl, ln, fn)
370 #endif /* ifdef LOGFNS */
371
372 #endif /* ifndef _ECORE_X_PRIVATE_H */