svn update: 48958 (latest:48959)
[framework/uifw/ecore.git] / src / lib / ecore_x / xcb / ecore_xcb_private.h
1 #ifndef __ECORE_XCB_PRIVATE_H__
2 #define __ECORE_XCB_PRIVATE_H__
3
4 #include "config.h"
5
6 #include <sys/param.h>
7
8 #ifndef MAXHOSTNAMELEN
9 # define MAXHOSTNAMELEN 256
10 #endif
11
12 #ifndef XK_MISCELLANY
13 # define XK_MISCELLANY 1
14 #endif /* XK_MISCELLANY */
15
16 #include <xcb/xcb.h>
17 #include <xcb/xcb_icccm.h>
18 #include <xcb/xcb_keysyms.h>
19 #include <xcb/bigreq.h>
20 #ifdef ECORE_XCB_CURSOR
21 # include <xcb/cursor.h>
22 #endif /* ECORE_XCB_CURSOR */
23 #ifdef ECORE_XCB_DAMAGE
24 # include <xcb/damage.h>
25 #endif /* ECORE_XCB_DAMAGE */
26 #ifdef ECORE_XCB_COMPOSITE
27 # include <xcb/composite.h>
28 #endif /* ECORE_XCB_COMPOSITE */
29 #ifdef ECORE_XCB_DPMS
30 # include <xcb/dpms.h>
31 #endif /* ECORE_XCB_DPMS */
32 #ifdef ECORE_XCB_RANDR
33 # include <xcb/randr.h>
34 #endif /* ECORE_XCB_RANDR */
35 #ifdef ECORE_XCB_RENDER
36 # include <xcb/render.h>
37 #endif /* ECORE_XCB_RENDER */
38 #ifdef ECORE_XCB_SCREENSAVER
39 # include <xcb/screensaver.h>
40 #endif /* ECORE_XCB_SCREENSAVER */
41 #ifdef ECORE_XCB_SHAPE
42 # include <xcb/shape.h>
43 #endif /* ECORE_XCB_SHAPE */
44 #ifdef ECORE_XCB_SYNC
45 # include <xcb/sync.h>
46 #endif /* ECORE_XCB_SYNC */
47 #ifdef ECORE_XCB_XFIXES
48 # include <xcb/xfixes.h>
49 #endif /* ECORE_XCB_XFIXES */
50 #ifdef ECORE_XCB_XINERAMA
51 # include <xcb/xinerama.h>
52 #endif /* ECORE_XCB_XINERAMA */
53 #ifdef ECORE_XCB_XPRINT
54 # include <xcb/xprint.h>
55 #endif /* ECORE_XCB_XPRINT */
56
57 #include "Ecore.h"
58 #include "ecore_private.h"
59 #include "Ecore_X.h"
60
61 extern int _ecore_x11xcb_log_dom ;
62
63 #ifdef ECORE_XLIB_XCB_DEFAULT_LOG_COLOR
64 # undef ECORE_XLIB_XCB_DEFAULT_LOG_COLOR
65 #endif
66 #define ECORE_XLIB_XCB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
67
68 #ifdef ERR
69 # undef ERR
70 #endif
71 #define ERR(...) EINA_LOG_DOM_ERR(_ecore_x11xcb_log_dom, __VA_ARGS__)
72
73 #ifdef DBG
74 # undef DBG
75 #endif
76 #define DBG(...) EINA_LOG_DOM_DBG(_ecore_x11xcb_log_dom, __VA_ARGS__)
77
78 #ifdef INF
79 # undef INF
80 #endif
81 #define INF(...) EINA_LOG_DOM_INFO(_ecore_x11xcb_log_dom, __VA_ARGS__)
82
83 #ifdef WRN
84 # undef WRN
85 #endif
86 #define WRN(...) EINA_LOG_DOM_WARN(_ecore_x11xcb_log_dom, __VA_ARGS__)
87
88 #ifdef CRIT
89 # undef CRIT
90 #endif
91 #define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_x11xcb_log_dom, __VA_ARGS__)
92
93 typedef struct _Ecore_X_Selection_Intern Ecore_X_Selection_Intern;
94
95 struct _Ecore_X_Selection_Intern
96 {
97    Ecore_X_Window    win;
98    Ecore_X_Atom      selection;
99    unsigned char     *data;
100    int               length;
101    Ecore_X_Time      time;
102 };
103
104 typedef struct _Ecore_X_Selection_Converter Ecore_X_Selection_Converter;
105
106 struct _Ecore_X_Selection_Converter
107 {
108    Ecore_X_Atom target;
109    int (*convert)(char *target, void *data, int size,
110                   void **data_ret, int *size_ret);
111    Ecore_X_Selection_Converter *next;
112 };
113
114 typedef struct _Ecore_X_Selection_Parser Ecore_X_Selection_Parser;
115
116 struct _Ecore_X_Selection_Parser
117 {
118    char     *target;
119    void *(*parse)(const char *target, void *data, int size, int format);
120    Ecore_X_Selection_Parser *next;
121 };
122
123 typedef struct _Ecore_X_DND_Source
124 {
125    int version;
126    Ecore_X_Window win, dest;
127
128    enum {
129       ECORE_X_DND_SOURCE_IDLE,
130       ECORE_X_DND_SOURCE_DRAGGING,
131       ECORE_X_DND_SOURCE_DROPPED,
132       ECORE_X_DND_SOURCE_CONVERTING
133    } state;
134
135    struct {
136       short x, y;
137       unsigned short width, height;
138    } rectangle;
139
140    struct {
141       Ecore_X_Window window;
142       int x, y;
143    } prev;
144    
145    Ecore_X_Time time;
146
147    Ecore_X_Atom action, accepted_action;
148
149    int will_accept;
150    int suppress;
151
152    int await_status;
153 } Ecore_X_DND_Source;
154
155 typedef struct _Ecore_X_DND_Target
156 {
157    int version;
158    Ecore_X_Window win, source;
159
160    enum {
161       ECORE_X_DND_TARGET_IDLE,
162       ECORE_X_DND_TARGET_ENTERED
163    } state;
164
165    struct {
166       int x, y;
167    } pos;
168
169    Ecore_X_Time time;
170
171    Ecore_X_Atom action, accepted_action;
172
173    int will_accept;
174 } Ecore_X_DND_Target;
175
176 extern int ECORE_X_MODIFIER_SHIFT;
177 extern int ECORE_X_MODIFIER_CTRL; 
178 extern int ECORE_X_MODIFIER_ALT; 
179 extern int ECORE_X_MODIFIER_WIN; 
180  
181 extern int ECORE_X_LOCK_SCROLL; 
182 extern int ECORE_X_LOCK_NUM; 
183 extern int ECORE_X_LOCK_CAPS; 
184
185 extern Ecore_X_Connection *_ecore_xcb_conn;
186 extern Ecore_X_Screen     *_ecore_xcb_screen;
187 extern double              _ecore_xcb_double_click_time;
188 extern Ecore_X_Time        _ecore_xcb_event_last_time;
189 extern Ecore_X_Window      _ecore_xcb_event_last_window;
190 extern int16_t             _ecore_xcb_event_last_root_x;
191 extern int16_t             _ecore_xcb_event_last_root_y;
192 extern int                 _ecore_xcb_xcursor;
193
194 extern Ecore_X_Atom        _ecore_xcb_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
195
196 extern int                 _ecore_window_grabs_num;
197 extern Ecore_X_Window     *_ecore_window_grabs;
198 extern int               (*_ecore_window_grab_replay_func) (void *data, int event_type, void *event);
199 extern void               *_ecore_window_grab_replay_data;
200
201 extern Ecore_X_Window      _ecore_xcb_private_window;
202
203
204 void _ecore_x_error_handler_init(void);
205
206 void _ecore_x_event_handle_any_event          (xcb_generic_event_t *event);
207 void _ecore_x_event_handle_key_press          (xcb_generic_event_t *event);
208 void _ecore_x_event_handle_key_release        (xcb_generic_event_t *event);
209 void _ecore_x_event_handle_button_press       (xcb_generic_event_t *event);
210 void _ecore_x_event_handle_button_release     (xcb_generic_event_t *event);
211 void _ecore_x_event_handle_motion_notify      (xcb_generic_event_t *event);
212 void _ecore_x_event_handle_enter_notify       (xcb_generic_event_t *event);
213 void _ecore_x_event_handle_leave_notify       (xcb_generic_event_t *event);
214 void _ecore_x_event_handle_focus_in           (xcb_generic_event_t *event);
215 void _ecore_x_event_handle_focus_out          (xcb_generic_event_t *event);
216 void _ecore_x_event_handle_keymap_notify      (xcb_generic_event_t *event);
217 void _ecore_x_event_handle_expose             (xcb_generic_event_t *event);
218 void _ecore_x_event_handle_graphics_expose    (xcb_generic_event_t *event);
219 void _ecore_x_event_handle_visibility_notify  (xcb_generic_event_t *event);
220 void _ecore_x_event_handle_create_notify      (xcb_generic_event_t *event);
221 void _ecore_x_event_handle_destroy_notify     (xcb_generic_event_t *event);
222 void _ecore_x_event_handle_unmap_notify       (xcb_generic_event_t *event);
223 void _ecore_x_event_handle_map_notify         (xcb_generic_event_t *event);
224 void _ecore_x_event_handle_map_request        (xcb_generic_event_t *event);
225 void _ecore_x_event_handle_reparent_notify    (xcb_generic_event_t *event);
226 void _ecore_x_event_handle_configure_notify   (xcb_generic_event_t *event);
227 void _ecore_x_event_handle_configure_request  (xcb_generic_event_t *event);
228 void _ecore_x_event_handle_gravity_notify     (xcb_generic_event_t *event);
229 void _ecore_x_event_handle_resize_request     (xcb_generic_event_t *event);
230 void _ecore_x_event_handle_circulate_notify   (xcb_generic_event_t *event);
231 void _ecore_x_event_handle_circulate_request  (xcb_generic_event_t *event);
232 void _ecore_x_event_handle_property_notify    (xcb_generic_event_t *event);
233 void _ecore_x_event_handle_selection_clear    (xcb_generic_event_t *event);
234 void _ecore_x_event_handle_selection_request  (xcb_generic_event_t *event);
235 void _ecore_x_event_handle_selection_notify   (xcb_generic_event_t *event);
236 void _ecore_x_event_handle_colormap_notify    (xcb_generic_event_t *event);
237 void _ecore_x_event_handle_client_message     (xcb_generic_event_t *event);
238 void _ecore_x_event_handle_mapping_notify     (xcb_generic_event_t *event);
239 #ifdef ECORE_XCB_DAMAGE
240 void _ecore_x_event_handle_damage_notify      (xcb_generic_event_t *event);
241 #endif /* ECORE_XCB_DAMAGE */
242 #ifdef ECORE_XCB_RANDR
243 void _ecore_x_event_handle_randr_change       (xcb_generic_event_t *event);
244 #endif /* ECORE_XCB_RANDR */
245 #ifdef ECORE_XCB_SCREENSAVER
246 void _ecore_x_event_handle_screensaver_notify (xcb_generic_event_t *event);
247 #endif /* ECORE_XCB_SCREENSAVER */
248 #ifdef ECORE_XCB_SHAPE
249 void _ecore_x_event_handle_shape_change       (xcb_generic_event_t *event);
250 #endif /* ECORE_XCB_SHAPE */
251 #ifdef ECORE_XCB_SYNC
252 void _ecore_x_event_handle_sync_counter       (xcb_generic_event_t *event);
253 void _ecore_x_event_handle_sync_alarm         (xcb_generic_event_t *event);
254 #endif /* ECORE_XCB_SYNC */
255 #ifdef ECORE_XCB_FIXES
256 void _ecore_x_event_handle_fixes_selection_notify(xcb_generic_event_t *event);
257 #endif /* ECORE_XCB_FIXES */
258
259
260 /* requests / replies */
261 int          _ecore_x_reply_init ();
262 void         _ecore_x_reply_shutdown ();
263 void         _ecore_xcb_cookie_cache (unsigned int cookie);
264 unsigned int _ecore_xcb_cookie_get (void);
265 void         _ecore_xcb_reply_cache (void *reply);
266 void        *_ecore_xcb_reply_get (void);
267
268
269 /* atoms */
270 extern Ecore_X_Atom ECORE_X_ATOM_ATOM;
271 extern Ecore_X_Atom ECORE_X_ATOM_CARDINAL;
272 extern Ecore_X_Atom ECORE_X_ATOM_STRING;
273 extern Ecore_X_Atom ECORE_X_ATOM_WINDOW;
274 extern Ecore_X_Atom ECORE_X_ATOM_E_FRAME_SIZE;
275 extern Ecore_X_Atom ECORE_X_ATOM_WM_SIZE_HINTS;
276
277 #define ECORE_X_ATOMS_COUNT 117
278
279 void _ecore_x_atom_init          (xcb_intern_atom_cookie_t *);
280 void _ecore_x_atom_init_finalize (xcb_intern_atom_cookie_t *);
281
282
283 /* damage */
284 void _ecore_x_damage_init          (const xcb_query_extension_reply_t *reply);
285 void _ecore_x_damage_init_finalize (void);
286
287 /* composite */
288 void _ecore_x_composite_init       (const xcb_query_extension_reply_t *reply);
289 void _ecore_x_composite_init_finalize (void);
290
291 /* from dnd */
292 void                _ecore_x_dnd_init       (void);
293 void                _ecore_x_dnd_shutdown   (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,
297                                              int x,
298                                              int y);
299
300
301 /* dpms */
302 void _ecore_x_dpms_init          (const xcb_query_extension_reply_t *reply);
303 void _ecore_x_dpms_init_finalize (void);
304
305
306 /* netwm */
307 Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
308 int                  _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data);
309 int                  _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data);
310
311
312 /* randr */
313 void _ecore_x_randr_init          (const xcb_query_extension_reply_t *reply);
314 void _ecore_x_randr_init_finalize (void);
315
316
317 /* selection */
318 void                      _ecore_x_selection_init(void);
319 void                      _ecore_x_selection_shutdown(void);
320 Ecore_X_Atom              _ecore_x_selection_target_atom_get(const char *target);
321 char                     *_ecore_x_selection_target_get(Ecore_X_Atom target);
322 Ecore_X_Selection_Intern *_ecore_x_selection_get(Ecore_X_Atom selection);
323 int                       _ecore_x_selection_set(Ecore_X_Window w, const void *data, int len, Ecore_X_Atom selection);
324 int                       _ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret);
325 void                     *_ecore_x_selection_parse(const char *target, void *data, int size, int format);
326
327
328 /* screensaver */
329 void _ecore_x_screensaver_init          (const xcb_query_extension_reply_t *reply);
330 void _ecore_x_screensaver_init_finalize (void);
331
332
333 /* shape */
334 void _ecore_x_shape_init          (const xcb_query_extension_reply_t *reply);
335 void _ecore_x_shape_init_finalize (void);
336
337
338 /* sync */
339 void _ecore_x_sync_init          (const xcb_query_extension_reply_t *reply);
340 void _ecore_x_sync_init_finalize (void);
341
342
343 /* xfixes */
344 void _ecore_x_xfixes_init          (const xcb_query_extension_reply_t *reply);
345 void _ecore_x_xfixes_init_finalize (void);
346
347
348 /* xinerama */
349 void _ecore_x_xinerama_init          (const xcb_query_extension_reply_t *reply);
350 void _ecore_x_xinerama_init_finalize (void);
351
352
353 /* xprint */
354 void _ecore_x_xprint_init          (const xcb_query_extension_reply_t *reply);
355 void _ecore_x_xprint_init_finalize (void);
356
357 /* to categorize */
358 void _ecore_x_sync_magic_send(int val, Ecore_X_Window swin);
359 void _ecore_x_window_grab_remove(Ecore_X_Window win);
360 void _ecore_x_key_grab_remove(Ecore_X_Window win);
361
362
363 #endif /* __ECORE_XCB_PRIVATE_H__*/