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/Xlib-xcb.h>
11 #include <X11/Xproto.h>
12 #include <X11/Xutil.h>
13 #include <X11/Xatom.h>
14 #include <X11/Xresource.h>
15 #include <X11/keysymdef.h>
16 #include <X11/extensions/XShm.h>
17 #include <X11/extensions/shape.h>
18 #include <X11/extensions/sync.h>
19 #include <X11/extensions/dpms.h>
20 #ifdef ECORE_XCURSOR
21 #include <X11/Xcursor/Xcursor.h>
22 #endif /* ifdef ECORE_XCURSOR */
23 #ifdef ECORE_XINERAMA
24 #include <X11/extensions/Xinerama.h>
25 #endif /* ifdef ECORE_XINERAMA */
26 #ifdef ECORE_XRANDR
27 #include <X11/extensions/Xrandr.h>
28 #endif /* ifdef ECORE_XRANDR */
29 #ifdef ECORE_XSS
30 #include <X11/extensions/scrnsaver.h>
31 #endif /* ifdef ECORE_XSS */
32 #ifdef ECORE_XRENDER
33 #include <X11/extensions/Xrender.h>
34 #endif /* ifdef ECORE_XRENDER */
35 #ifdef ECORE_XFIXES
36 #include <X11/extensions/Xfixes.h>
37 #endif /* ifdef ECORE_XFIXES */
38 #ifdef ECORE_XCOMPOSITE
39 #include <X11/extensions/Xcomposite.h>
40 #endif /* ifdef ECORE_XCOMPOSITE */
41 #ifdef ECORE_XPRESENT
42 #include <X11/extensions/Xpresent.h>
43 #endif /* ifdef ECORE_XPRESENT */
44 #ifdef ECORE_XDAMAGE
45 #include <X11/extensions/Xdamage.h>
46 #endif /* ifdef ECORE_XDAMAGE */
47 #ifdef ECORE_XDPMS
48 #include <X11/extensions/dpms.h>
49 #endif /* ifdef ECORE_XDPMS */
50 #ifdef ECORE_XKB
51 #include <X11/XKBlib.h>
52 #endif /* ifdef ECORE_XKB */
53 #ifdef ECORE_XI2
54 #include <X11/extensions/XInput2.h>
55 #endif /* ifdef ECORE_XI2 */
56 
57 #ifndef XK_MISCELLANY
58 # define XK_MISCELLANY 1
59 #endif
60 
61 #include "Ecore.h"
62 #include "ecore_private.h"
63 #include "Ecore_X.h"
64 #include "Ecore_Input.h"
65 
66 extern int _ecore_xlib_log_dom;
67 extern Eina_Bool _ecore_xlib_sync;
68 #ifdef ECORE_XLIB_DEFAULT_LOG_COLOR
69 # undef ECORE_XLIB_DEFAULT_LOG_COLOR
70 #endif /* ifdef ECORE_XLIB_DEFAULT_LOG_COLOR */
71 #define ECORE_XLIB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
72 
73 #ifdef ERR
74 # undef ERR
75 #endif /* ifdef ERR */
76 #define ERR(...) EINA_LOG_DOM_ERR(_ecore_xlib_log_dom, __VA_ARGS__)
77 
78 #ifdef DBG
79 # undef DBG
80 #endif /* ifdef DBG */
81 #define DBG(...) EINA_LOG_DOM_DBG(_ecore_xlib_log_dom, __VA_ARGS__)
82 
83 #ifdef INF
84 # undef INF
85 #endif /* ifdef INF */
86 #define INF(...) EINA_LOG_DOM_INFO(_ecore_xlib_log_dom, __VA_ARGS__)
87 
88 #ifdef WRN
89 # undef WRN
90 #endif /* ifdef WRN */
91 #define WRN(...) EINA_LOG_DOM_WARN(_ecore_xlib_log_dom, __VA_ARGS__)
92 
93 #ifdef CRI
94 # undef CRI
95 #endif /* ifdef CRI */
96 #define CRI(...) EINA_LOG_DOM_CRIT(_ecore_xlib_log_dom, __VA_ARGS__)
97 
98 typedef struct _Ecore_X_Selection_Intern Ecore_X_Selection_Intern;
99 
100 struct _Ecore_X_Selection_Intern
101 {
102    Ecore_X_Window win;
103    Ecore_X_Atom   selection;
104    unsigned char *data;
105    int            length;
106    Time           time;
107 };
108 
109 typedef struct _Ecore_X_Selection_Converter Ecore_X_Selection_Converter;
110 
111 struct _Ecore_X_Selection_Converter
112 {
113    EINA_INLIST;
114    Ecore_X_Atom                 target;
115    Eina_Bool                    (*convert)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *type, int *typeseize);
116 };
117 
118 typedef struct _Ecore_X_Selection_Parser Ecore_X_Selection_Parser;
119 
120 struct _Ecore_X_Selection_Parser
121 {
122    EINA_INLIST;
123    char                     *target;
124    void                     *(*parse)(const char *target, void *data, int size, int format);
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 Display *_ecore_x_disp;
184 extern double _ecore_x_double_click_time;
185 extern Time _ecore_x_event_last_time;
186 extern Window _ecore_x_event_last_win;
187 extern int _ecore_x_event_last_root_x;
188 extern int _ecore_x_event_last_root_y;
189 extern Eina_Bool _ecore_x_xcursor;
190 
191 extern Ecore_X_Atom _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
192 
193 extern int _ecore_window_grabs_num;
194 typedef struct _Wingrab Wingrab;
195 struct _Wingrab
196 {
197    Window win;
198    Ecore_X_Event_Mask event_mask;
199    int mod, any_mod;
200    int button;
201 };
202 extern Wingrab *_ecore_window_grabs;
203 
204 extern Eina_Bool (*_ecore_window_grab_replay_func)(void *data,
205                                                    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(XEvent *xevent);
226 void _ecore_x_event_handle_create_notify(XEvent *xevent);
227 void _ecore_x_event_handle_destroy_notify(XEvent *xevent);
228 void _ecore_x_event_handle_unmap_notify(XEvent *xevent);
229 void _ecore_x_event_handle_map_notify(XEvent *xevent);
230 void _ecore_x_event_handle_map_request(XEvent *xevent);
231 void _ecore_x_event_handle_reparent_notify(XEvent *xevent);
232 void _ecore_x_event_handle_configure_notify(XEvent *xevent);
233 void _ecore_x_event_handle_configure_request(XEvent *xevent);
234 void _ecore_x_event_handle_gravity_notify(XEvent *xevent);
235 void _ecore_x_event_handle_resize_request(XEvent *xevent);
236 void _ecore_x_event_handle_circulate_notify(XEvent *xevent);
237 void _ecore_x_event_handle_circulate_request(XEvent *xevent);
238 void _ecore_x_event_handle_property_notify(XEvent *xevent);
239 void _ecore_x_event_handle_selection_clear(XEvent *xevent);
240 void _ecore_x_event_handle_selection_request(XEvent *xevent);
241 void _ecore_x_event_handle_selection_notify(XEvent *xevent);
242 void _ecore_x_event_handle_colormap_notify(XEvent *xevent);
243 void _ecore_x_event_handle_client_message(XEvent *xevent);
244 void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
245 void _ecore_x_event_handle_shape_change(XEvent *xevent);
246 void _ecore_x_event_handle_screensaver_notify(XEvent *xevent);
247 void _ecore_x_event_handle_sync_counter(XEvent *xevent);
248 void _ecore_x_event_handle_sync_alarm(XEvent *xevent);
249 #ifdef ECORE_XRANDR
250 void _ecore_x_event_handle_randr_change(XEvent *xevent);
251 void _ecore_x_event_handle_randr_notify(XEvent *xevent);
252 #endif /* ifdef ECORE_XRANDR */
253 #ifdef ECORE_XFIXES
254 void _ecore_x_event_handle_fixes_selection_notify(XEvent *xevent);
255 #endif /* ifdef ECORE_XFIXES */
256 #ifdef ECORE_XDAMAGE
257 void      _ecore_x_event_handle_damage_notify(XEvent *xevent);
258 #endif /* ifdef ECORE_XDAMAGE */
259 #ifdef ECORE_XKB
260 void   _ecore_x_event_handle_xkb(XEvent *xevent);
261 #endif  /* ifdef ECORE_XKB */
262 void      _ecore_x_event_handle_generic_event(XEvent *xevent);
263 
264 #ifdef ECORE_XPRESENT
265 void      _ecore_x_present_handler(XGenericEvent *ge);
266 #endif
267 
268 void      _ecore_x_selection_data_init(void);
269 void      _ecore_x_selection_shutdown(void);
270 Ecore_X_Atom _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 *_ecore_x_selection_get(Ecore_X_Atom selection);
273 Eina_Bool _ecore_x_selection_set(Window w,
274                                   const void *data,
275                                   int len,
276                                   Ecore_X_Atom selection);
277 int _ecore_x_selection_convert(Ecore_X_Atom selection,
278                                Ecore_X_Atom target,
279                                void **data_ret,
280                                Ecore_X_Atom *targettype,
281                                int *targetsize);
282 void *_ecore_x_selection_parse(const char *target,
283                                void *data,
284                                int size,
285                                int format);
286 
287 int _ecore_x_window_grab_remove(Ecore_X_Window win, int button, int mod, int any_mod);
288 int _ecore_x_key_grab_remove(Ecore_X_Window win, const char *key, int mod, int any_mod);
289 void _ecore_x_window_grab_suspend(void);
290 void _ecore_x_window_grab_resume(void);
291 void _ecore_x_key_grab_suspend(void);
292 void _ecore_x_key_grab_resume(void);
293 
294 /* from dnd */
295 void                _ecore_x_dnd_init(void);
296 Ecore_X_DND_Source *_ecore_x_dnd_source_get(void);
297 Ecore_X_DND_Target *_ecore_x_dnd_target_get(void);
298 void                _ecore_x_dnd_drag(Ecore_X_Window root,
299                                       int x,
300                                       int y);
301 void _ecore_x_dnd_shutdown(void);
302 
303 /* from netwm */
304 Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
305 int                  _ecore_x_netwm_startup_info_begin(Ecore_X_Window win,
306                                                        char *data);
307 int                  _ecore_x_netwm_startup_info(Ecore_X_Window win,
308                                                  char *data);
309 
310 /* Fixes * Damage * Composite * DPMS */
311 void _ecore_x_fixes_init(void);
312 void _ecore_x_damage_init(void);
313 void _ecore_x_composite_init(void);
314 void _ecore_x_present_init(void);
315 void _ecore_x_dpms_init(void);
316 void _ecore_x_randr_init(void);
317 void _ecore_x_gesture_init(void);
318 
319 void _ecore_x_atoms_init(void);
320 
321 extern int _ecore_x_present_major;
322 extern int _ecore_x_xi2_opcode;
323 
324 void _ecore_x_events_init(void);
325 void _ecore_x_events_shutdown(void);
326 
327 void _ecore_x_input_init(void);
328 void _ecore_x_input_shutdown(void);
329 void _ecore_x_input_handler(XEvent *xevent);
330 /* from sync */
331 
332 void
333 _ecore_x_axis_update(Ecore_Window window,
334                      Ecore_Window event_window,
335                      Ecore_Window root_window,
336                      unsigned int timestamp,
337                      int devid,
338                      int toolid,
339                      int naxis,
340                      Ecore_Axis *axis);
341 
342 void _ecore_mouse_move(unsigned int timestamp,
343                        unsigned int xmodifiers,
344                        int x,
345                        int y,
346                        int x_root,
347                        int y_root,
348                        unsigned int event_window,
349                        unsigned int window,
350                        unsigned int root_win,
351                        int same_screen,
352                        int dev,
353                        double radx,
354                        double rady,
355                        double pressure,
356                        double angle,
357                        double mx,
358                        double my,
359                        double mrx,
360                        double mry);
361 Ecore_Event_Mouse_Button *_ecore_mouse_button(int event,
362                                               unsigned int timestamp,
363                                               unsigned int xmodifiers,
364                                               unsigned int buttons,
365                                               int x,
366                                               int y,
367                                               int x_root,
368                                               int y_root,
369                                               unsigned int event_window,
370                                               unsigned int window,
371                                               unsigned int root_win,
372                                               int same_screen,
373                                               int dev,
374                                               double radx,
375                                               double rady,
376                                               double pressure,
377                                               double angle,
378                                               double mx,
379                                               double my,
380                                               double mrx,
381                                               double mry);
382 
383 void _ecore_x_modifiers_get(void);
384 KeySym _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
385 
386 int _ecore_x_shutdown(void);
387 //#define LOGFNS 1
388 
389 #ifdef LOGFNS
390 #include <stdio.h>
391 #define LOGFN printf("-ECORE-X: %25s: %5i - %s\n", __FILE__, __LINE__, __func__)
392 #else /* ifdef LOGFNS */
393 #define LOGFN
394 #endif /* ifdef LOGFNS */
395 
396 
397 
398 #ifdef EAPI
399 # undef EAPI
400 #endif // ifdef EAPI
401 
402 #ifdef __GNUC__
403 # if __GNUC__ >= 4
404 #  define EAPI __attribute__ ((visibility("default")))
405 # else // if __GNUC__ >= 4
406 #  define EAPI
407 # endif // if __GNUC__ >= 4
408 #else // ifdef __GNUC__
409 # define EAPI
410 #endif // ifdef __GNUC__
411 EAPI void ecore_x_window_root_properties_select(void);
412 #undef EAPI
413 #define EAPI
414 
415 
416 #endif /* ifndef _ECORE_X_PRIVATE_H */
417