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