svn update: 48958 (latest:48959)
[framework/uifw/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
8
9 #define XK_MISCELLANY 1
10 #include <X11/Xlib.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
23 #ifdef ECORE_XPRINT
24 #include <X11/extensions/Print.h>
25 #endif
26 #ifdef ECORE_XINERAMA
27 #include <X11/extensions/Xinerama.h>
28 #endif
29 #ifdef ECORE_XRANDR
30 #include <X11/extensions/Xrandr.h>
31 #endif
32 #ifdef ECORE_XSS
33 #include <X11/extensions/scrnsaver.h>
34 #endif
35 #ifdef ECORE_XRENDER
36 #include <X11/extensions/Xrender.h>
37 #endif
38 #ifdef ECORE_XFIXES
39 #include <X11/extensions/Xfixes.h>
40 #endif
41 #ifdef ECORE_XCOMPOSITE
42 #include <X11/extensions/Xcomposite.h>
43 #endif
44 #ifdef ECORE_XDAMAGE
45 #include <X11/extensions/Xdamage.h>
46 #endif
47 #ifdef ECORE_XDPMS
48 #include <X11/extensions/dpms.h>
49 #endif
50 #ifdef ECORE_XKB
51 #include <X11/XKBlib.h>
52 #endif
53 #ifdef ECORE_XI2
54 #include <X11/extensions/XInput2.h>
55 #endif
56
57 #include "Ecore.h"
58 #include "ecore_private.h"
59 #include "Ecore_X.h"
60 #include "Ecore_Input.h"
61
62 extern int _ecore_xlib_log_dom;
63 #ifdef ECORE_XLIB_DEFAULT_LOG_COLOR
64 # undef ECORE_XLIB_DEFAULT_LOG_COLOR
65 #endif
66 #define ECORE_XLIB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
67
68 #ifdef ERR
69 # undef ERR
70 #endif
71 #define ERR(...) EINA_LOG_DOM_ERR(_ecore_xlib_log_dom, __VA_ARGS__)
72
73 #ifdef DBG
74 # undef DBG
75 #endif
76 #define DBG(...) EINA_LOG_DOM_DBG(_ecore_xlib_log_dom, __VA_ARGS__)
77
78 #ifdef INF
79 # undef INF
80 #endif
81 #define INF(...) EINA_LOG_DOM_INFO(_ecore_xlib_log_dom, __VA_ARGS__)
82
83 #ifdef WRN
84 # undef WRN
85 #endif
86 #define WRN(...) EINA_LOG_DOM_WARN(_ecore_xlib_log_dom, __VA_ARGS__)
87
88 #ifdef CRIT
89 # undef CRIT
90 #endif
91 #define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_xlib_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    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    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    Time time;
170
171    Ecore_X_Atom action, accepted_action;
172    
173    int will_accept;
174 } Ecore_X_DND_Target;
175
176
177 extern int ECORE_X_MODIFIER_SHIFT;
178 extern int ECORE_X_MODIFIER_CTRL;
179 extern int ECORE_X_MODIFIER_ALT;
180 extern int ECORE_X_MODIFIER_WIN;
181
182 extern int ECORE_X_LOCK_SCROLL;
183 extern int ECORE_X_LOCK_NUM;
184 extern int ECORE_X_LOCK_CAPS;
185
186 extern Display *_ecore_x_disp;
187 extern double   _ecore_x_double_click_time;
188 extern Time     _ecore_x_event_last_time;
189 extern Window   _ecore_x_event_last_win;
190 extern int      _ecore_x_event_last_root_x;
191 extern int      _ecore_x_event_last_root_y;
192 extern int      _ecore_x_xcursor;
193 extern XIC      _ecore_x_ic;
194
195 extern Ecore_X_Atom     _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
196
197 extern int      _ecore_window_grabs_num;
198 extern Window  *_ecore_window_grabs;
199 extern int    (*_ecore_window_grab_replay_func) (void *data, int event_type, void *event);
200 extern void    *_ecore_window_grab_replay_data;
201
202 extern Ecore_X_Window _ecore_x_private_win;
203
204 void _ecore_x_error_handler_init(void);
205 void _ecore_x_event_handle_any_event(XEvent *xevent);
206 void _ecore_x_event_handle_key_press(XEvent *xevent);
207 void _ecore_x_event_handle_key_release(XEvent *xevent);
208 void _ecore_x_event_handle_button_press(XEvent *xevent);
209 void _ecore_x_event_handle_button_release(XEvent *xevent);
210 void _ecore_x_event_handle_motion_notify(XEvent *xevent);
211 void _ecore_x_event_handle_enter_notify(XEvent *xevent);
212 void _ecore_x_event_handle_leave_notify(XEvent *xevent);
213 void _ecore_x_event_handle_focus_in(XEvent *xevent);
214 void _ecore_x_event_handle_focus_out(XEvent *xevent);
215 void _ecore_x_event_handle_keymap_notify(XEvent *xevent);    
216 void _ecore_x_event_handle_expose(XEvent *xevent);
217 void _ecore_x_event_handle_graphics_expose(XEvent *xevent);
218 void _ecore_x_event_handle_visibility_notify(XEvent *xevent);
219 void _ecore_x_event_handle_create_notify(XEvent *xevent);
220 void _ecore_x_event_handle_destroy_notify(XEvent *xevent);
221 void _ecore_x_event_handle_unmap_notify(XEvent *xevent);
222 void _ecore_x_event_handle_map_notify(XEvent *xevent);
223 void _ecore_x_event_handle_map_request(XEvent *xevent);
224 void _ecore_x_event_handle_reparent_notify(XEvent *xevent);
225 void _ecore_x_event_handle_configure_notify(XEvent *xevent);
226 void _ecore_x_event_handle_configure_request(XEvent *xevent);
227 void _ecore_x_event_handle_gravity_notify(XEvent *xevent);
228 void _ecore_x_event_handle_resize_request(XEvent *xevent);
229 void _ecore_x_event_handle_circulate_notify(XEvent *xevent);
230 void _ecore_x_event_handle_circulate_request(XEvent *xevent);
231 void _ecore_x_event_handle_property_notify(XEvent *xevent);
232 void _ecore_x_event_handle_selection_clear(XEvent *xevent);
233 void _ecore_x_event_handle_selection_request(XEvent *xevent);
234 void _ecore_x_event_handle_selection_notify(XEvent *xevent);
235 void _ecore_x_event_handle_colormap_notify(XEvent *xevent);
236 void _ecore_x_event_handle_client_message(XEvent *xevent);
237 void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
238 void _ecore_x_event_handle_shape_change(XEvent *xevent);
239 void _ecore_x_event_handle_screensaver_notify(XEvent *xevent);
240 void _ecore_x_event_handle_sync_counter(XEvent *xevent);
241 void _ecore_x_event_handle_sync_alarm(XEvent *xevent);
242 #ifdef ECORE_XRANDR
243 void _ecore_x_event_handle_randr_change(XEvent *xevent);
244 void _ecore_x_event_handle_randr_notify(XEvent *xevent);
245 #endif
246 #ifdef ECORE_XFIXES
247 void _ecore_x_event_handle_fixes_selection_notify(XEvent *xevent);
248 #endif
249 #ifdef ECORE_XDAMAGE
250 void _ecore_x_event_handle_damage_notify(XEvent *xevent);
251 #endif
252 void _ecore_x_event_handle_generic_event(XEvent *xevent);
253
254 void  _ecore_x_selection_data_init(void);
255 void  _ecore_x_selection_shutdown(void);
256 Ecore_X_Atom
257       _ecore_x_selection_target_atom_get(const char *target);
258 char *_ecore_x_selection_target_get(Ecore_X_Atom target);
259 Ecore_X_Selection_Intern * 
260       _ecore_x_selection_get(Ecore_X_Atom selection);
261 int   _ecore_x_selection_set(Window w, const void *data, int len, Ecore_X_Atom selection);
262 int   _ecore_x_selection_convert(Ecore_X_Atom selection, Ecore_X_Atom target, void **data_ret);
263 void *_ecore_x_selection_parse(const char *target, void *data, int size, int format);
264
265 void _ecore_x_sync_magic_send(int val, Ecore_X_Window swin);
266 void _ecore_x_window_grab_remove(Ecore_X_Window win);
267 void _ecore_x_key_grab_remove(Ecore_X_Window win);
268
269 /* from dnd */
270 void _ecore_x_dnd_init(void);
271 Ecore_X_DND_Source *_ecore_x_dnd_source_get(void);
272 Ecore_X_DND_Target *_ecore_x_dnd_target_get(void);
273 void _ecore_x_dnd_drag(Ecore_X_Window root, int x, int y);
274 void _ecore_x_dnd_shutdown(void);
275
276 /* from netwm */
277 Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
278 int                  _ecore_x_netwm_startup_info_begin(Ecore_X_Window win, char *data);
279 int                  _ecore_x_netwm_startup_info(Ecore_X_Window win, char *data);
280
281 /* Fixes * Damage * Composite * DPMS */
282 void _ecore_x_fixes_init(void);
283 void _ecore_x_damage_init(void);
284 void _ecore_x_composite_init(void);
285 void _ecore_x_dpms_init(void);
286 void _ecore_x_randr_init(void);
287
288 void _ecore_x_atoms_init(void);
289
290 extern int _ecore_x_xi2_opcode;
291
292 void _ecore_x_input_init(void);
293 void _ecore_x_input_shutdown(void);
294 void _ecore_x_input_handler(XEvent* xevent);    
295 /* from sync */
296
297 void _ecore_mouse_move(unsigned int timestamp, unsigned int xmodifiers, int x, int y, int x_root, int y_root, unsigned int event_window, unsigned int window, unsigned int root_win, int same_screen, int dev, double radx, double rady, double pressure, double angle, double mx, double my, double mrx, double mry);
298 Ecore_Event_Mouse_Button *_ecore_mouse_button(int event, unsigned int timestamp, unsigned int xmodifiers, unsigned int buttons, int x, int y, int x_root, int y_root, unsigned int event_window, unsigned int window, unsigned int root_win, int same_screen, int dev, double radx, double rady, double pressure, double angle, double mx, double my, double mrx, double mry);
299
300 //#define LOGFNS 1
301
302 #ifdef LOGFNS
303 #define LOGFN(fl, ln, fn) printf("-ECORE-X: %25s: %5i - %s\n", fl, ln, fn);
304 #else
305 #define LOGFN(fl, ln, fn)
306 #endif
307
308 #endif