efl/src/lib/ecore_x/ecore_x_private.h

430 lines
14 KiB
C
Raw Normal View History

#ifndef _ECORE_X_PRIVATE_H
#define _ECORE_X_PRIVATE_H
#include <sys/param.h>
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 256
2010-08-02 10:47:49 -07:00
#endif /* ifndef MAXHOSTNAMELEN */
#include <X11/Xlib.h>
#include <X11/Xlib-xcb.h>
#include <X11/Xproto.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
#include <X11/Xresource.h>
#include <X11/keysymdef.h>
#include <X11/extensions/XShm.h>
#include <X11/extensions/shape.h>
#include <X11/extensions/sync.h>
#include <X11/extensions/dpms.h>
#ifdef ECORE_XCURSOR
#include <X11/Xcursor/Xcursor.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XCURSOR */
#ifdef ECORE_XINERAMA
#include <X11/extensions/Xinerama.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XINERAMA */
#ifdef ECORE_XRANDR
#include <X11/extensions/Xrandr.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XRANDR */
#ifdef ECORE_XSS
#include <X11/extensions/scrnsaver.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XSS */
#ifdef ECORE_XRENDER
#include <X11/extensions/Xrender.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XRENDER */
#ifdef ECORE_XFIXES
#include <X11/extensions/Xfixes.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XFIXES */
#ifdef ECORE_XCOMPOSITE
#include <X11/extensions/Xcomposite.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XCOMPOSITE */
#ifdef ECORE_XPRESENT
#include <X11/extensions/Xpresent.h>
#endif /* ifdef ECORE_XPRESENT */
#ifdef ECORE_XDAMAGE
#include <X11/extensions/Xdamage.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XDAMAGE */
#ifdef ECORE_XGESTURE
#include <X11/extensions/gesture.h>
#include <X11/extensions/gestureproto.h>
#endif /* ifdef ECORE_XGESTURE */
#ifdef ECORE_XDPMS
#include <X11/extensions/dpms.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XDPMS */
#ifdef ECORE_XKB
#include <X11/XKBlib.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XKB */
#ifdef ECORE_XI2
#include <X11/extensions/XInput2.h>
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XI2 */
#ifndef XK_MISCELLANY
# define XK_MISCELLANY 1
#endif
#include "Ecore.h"
#include "ecore_private.h"
#include "Ecore_X.h"
#include "Ecore_Input.h"
extern int _ecore_xlib_log_dom;
extern Eina_Bool _ecore_xlib_sync;
#ifdef ECORE_XLIB_DEFAULT_LOG_COLOR
# undef ECORE_XLIB_DEFAULT_LOG_COLOR
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XLIB_DEFAULT_LOG_COLOR */
#define ECORE_XLIB_DEFAULT_LOG_COLOR EINA_COLOR_BLUE
#ifdef ERR
# undef ERR
2010-08-02 10:47:49 -07:00
#endif /* ifdef ERR */
#define ERR(...) EINA_LOG_DOM_ERR(_ecore_xlib_log_dom, __VA_ARGS__)
#ifdef DBG
# undef DBG
2010-08-02 10:47:49 -07:00
#endif /* ifdef DBG */
#define DBG(...) EINA_LOG_DOM_DBG(_ecore_xlib_log_dom, __VA_ARGS__)
#ifdef INF
# undef INF
2010-08-02 10:47:49 -07:00
#endif /* ifdef INF */
#define INF(...) EINA_LOG_DOM_INFO(_ecore_xlib_log_dom, __VA_ARGS__)
#ifdef WRN
# undef WRN
2010-08-02 10:47:49 -07:00
#endif /* ifdef WRN */
#define WRN(...) EINA_LOG_DOM_WARN(_ecore_xlib_log_dom, __VA_ARGS__)
#ifdef CRI
# undef CRI
#endif /* ifdef CRI */
#define CRI(...) EINA_LOG_DOM_CRIT(_ecore_xlib_log_dom, __VA_ARGS__)
typedef struct _Ecore_X_Selection_Intern Ecore_X_Selection_Intern;
struct _Ecore_X_Selection_Intern
{
Ecore_X_Window win;
2010-08-02 10:47:49 -07:00
Ecore_X_Atom selection;
unsigned char *data;
2010-08-02 10:47:49 -07:00
int length;
Time time;
};
typedef struct _Ecore_X_Selection_Converter Ecore_X_Selection_Converter;
struct _Ecore_X_Selection_Converter
{
EINA_INLIST;
2010-08-02 10:47:49 -07:00
Ecore_X_Atom target;
Eina_Bool (*convert)(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *type, int *typeseize);
};
typedef struct _Ecore_X_Selection_Parser Ecore_X_Selection_Parser;
struct _Ecore_X_Selection_Parser
{
EINA_INLIST;
2010-08-02 10:47:49 -07:00
char *target;
void *(*parse)(const char *target, void *data, int size, int format);
};
typedef struct _Ecore_X_DND_Source
{
2010-08-02 10:47:49 -07:00
int version;
2005-04-11 14:41:45 -07:00
Ecore_X_Window win, dest;
enum {
ECORE_X_DND_SOURCE_IDLE,
ECORE_X_DND_SOURCE_DRAGGING,
ECORE_X_DND_SOURCE_DROPPED,
ECORE_X_DND_SOURCE_CONVERTING
} state;
struct
{
2010-08-02 10:47:49 -07:00
short x, y;
unsigned short width, height;
} rectangle;
struct
{
Ecore_X_Window window;
2010-08-02 10:47:49 -07:00
int x, y;
} prev;
2010-08-02 10:47:49 -07:00
Time time;
Ecore_X_Atom action, accepted_action;
2010-08-02 10:47:49 -07:00
int will_accept;
int suppress;
2004-02-29 00:15:47 -08:00
2010-08-02 10:47:49 -07:00
int await_status;
} Ecore_X_DND_Source;
typedef struct _Ecore_X_DND_Target
{
2010-08-02 10:47:49 -07:00
int version;
2005-04-11 14:41:45 -07:00
Ecore_X_Window win, source;
enum {
ECORE_X_DND_TARGET_IDLE,
ECORE_X_DND_TARGET_ENTERED
} state;
struct
{
int x, y;
} pos;
2010-08-02 10:47:49 -07:00
Time time;
Ecore_X_Atom action, accepted_action;
2010-08-02 10:47:49 -07:00
int will_accept;
} Ecore_X_DND_Target;
extern Display *_ecore_x_disp;
extern double _ecore_x_double_click_time;
extern Time _ecore_x_event_last_time;
extern Window _ecore_x_event_last_win;
extern int _ecore_x_event_last_root_x;
extern int _ecore_x_event_last_root_y;
extern Eina_Bool _ecore_x_xcursor;
extern Ecore_X_Atom _ecore_x_atoms_wm_protocols[ECORE_X_WM_PROTOCOL_NUM];
extern int _ecore_window_grabs_num;
typedef struct _Wingrab Wingrab;
struct _Wingrab
{
Window win;
Ecore_X_Event_Mask event_mask;
int mod, any_mod;
int button;
};
extern Wingrab *_ecore_window_grabs;
extern Eina_Bool (*_ecore_window_grab_replay_func)(void *data,
int event_type,
void *event);
extern void *_ecore_window_grab_replay_data;
extern Ecore_X_Window _ecore_x_private_win;
void _ecore_x_error_handler_init(void);
void _ecore_x_event_handle_any_event(XEvent *xevent);
void _ecore_x_event_handle_key_press(XEvent *xevent);
void _ecore_x_event_handle_key_release(XEvent *xevent);
void _ecore_x_event_handle_button_press(XEvent *xevent);
void _ecore_x_event_handle_button_release(XEvent *xevent);
void _ecore_x_event_handle_motion_notify(XEvent *xevent);
void _ecore_x_event_handle_enter_notify(XEvent *xevent);
void _ecore_x_event_handle_leave_notify(XEvent *xevent);
void _ecore_x_event_handle_focus_in(XEvent *xevent);
void _ecore_x_event_handle_focus_out(XEvent *xevent);
void _ecore_x_event_handle_keymap_notify(XEvent *xevent);
void _ecore_x_event_handle_expose(XEvent *xevent);
void _ecore_x_event_handle_graphics_expose(XEvent *xevent);
void _ecore_x_event_handle_visibility_notify(XEvent *xevent);
void _ecore_x_event_handle_create_notify(XEvent *xevent);
void _ecore_x_event_handle_destroy_notify(XEvent *xevent);
void _ecore_x_event_handle_unmap_notify(XEvent *xevent);
void _ecore_x_event_handle_map_notify(XEvent *xevent);
void _ecore_x_event_handle_map_request(XEvent *xevent);
void _ecore_x_event_handle_reparent_notify(XEvent *xevent);
void _ecore_x_event_handle_configure_notify(XEvent *xevent);
void _ecore_x_event_handle_configure_request(XEvent *xevent);
void _ecore_x_event_handle_gravity_notify(XEvent *xevent);
void _ecore_x_event_handle_resize_request(XEvent *xevent);
void _ecore_x_event_handle_circulate_notify(XEvent *xevent);
void _ecore_x_event_handle_circulate_request(XEvent *xevent);
void _ecore_x_event_handle_property_notify(XEvent *xevent);
void _ecore_x_event_handle_selection_clear(XEvent *xevent);
void _ecore_x_event_handle_selection_request(XEvent *xevent);
void _ecore_x_event_handle_selection_notify(XEvent *xevent);
void _ecore_x_event_handle_colormap_notify(XEvent *xevent);
void _ecore_x_event_handle_client_message(XEvent *xevent);
void _ecore_x_event_handle_mapping_notify(XEvent *xevent);
void _ecore_x_event_handle_shape_change(XEvent *xevent);
void _ecore_x_event_handle_screensaver_notify(XEvent *xevent);
#ifdef ECORE_XGESTURE
void _ecore_x_event_handle_gesture_notify_flick(XEvent *xevent);
void _ecore_x_event_handle_gesture_notify_pan(XEvent *xevent);
void _ecore_x_event_handle_gesture_notify_pinchrotation(XEvent *xevent);
void _ecore_x_event_handle_gesture_notify_tap(XEvent *xevent);
void _ecore_x_event_handle_gesture_notify_tapnhold(XEvent *xevent);
void _ecore_x_event_handle_gesture_notify_hold(XEvent *xevent);
void _ecore_x_event_handle_gesture_notify_group(XEvent *xevent);
#endif /* ifdef ECORE_XGESTURE */
void _ecore_x_event_handle_sync_counter(XEvent *xevent);
void _ecore_x_event_handle_sync_alarm(XEvent *xevent);
#ifdef ECORE_XRANDR
void _ecore_x_event_handle_randr_change(XEvent *xevent);
void _ecore_x_event_handle_randr_notify(XEvent *xevent);
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XRANDR */
#ifdef ECORE_XFIXES
void _ecore_x_event_handle_fixes_selection_notify(XEvent *xevent);
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XFIXES */
#ifdef ECORE_XDAMAGE
void _ecore_x_event_handle_damage_notify(XEvent *xevent);
2010-08-02 10:47:49 -07:00
#endif /* ifdef ECORE_XDAMAGE */
#ifdef ECORE_XKB
void _ecore_x_event_handle_xkb(XEvent *xevent);
#endif /* ifdef ECORE_XKB */
void _ecore_x_event_handle_generic_event(XEvent *xevent);
#ifdef ECORE_XPRESENT
void _ecore_x_present_handler(XGenericEvent *ge);
#endif
void _ecore_x_selection_data_init(void);
void _ecore_x_selection_shutdown(void);
Ecore_X_Atom _ecore_x_selection_target_atom_get(const char *target);
char *_ecore_x_selection_target_get(Ecore_X_Atom target);
Ecore_X_Selection_Intern *_ecore_x_selection_get(Ecore_X_Atom selection);
Eina_Bool _ecore_x_selection_set(Window w,
const void *data,
int len,
Ecore_X_Atom selection);
int _ecore_x_selection_convert(Ecore_X_Atom selection,
Ecore_X_Atom target,
void **data_ret,
Ecore_X_Atom *targettype,
int *targetsize);
void *_ecore_x_selection_parse(const char *target,
void *data,
int size,
int format);
int _ecore_x_window_grab_remove(Ecore_X_Window win, int button, int mod, int any_mod);
int _ecore_x_key_grab_remove(Ecore_X_Window win, const char *key, int mod, int any_mod);
void _ecore_x_window_grab_suspend(void);
void _ecore_x_window_grab_resume(void);
void _ecore_x_key_grab_suspend(void);
void _ecore_x_key_grab_resume(void);
/* from dnd */
void _ecore_x_dnd_init(void);
Ecore_X_DND_Source *_ecore_x_dnd_source_get(void);
Ecore_X_DND_Target *_ecore_x_dnd_target_get(void);
void _ecore_x_dnd_drag(Ecore_X_Window root,
int x,
int y);
void _ecore_x_dnd_shutdown(void);
/* from netwm */
Ecore_X_Window_State _ecore_x_netwm_state_get(Ecore_X_Atom a);
int _ecore_x_netwm_startup_info_begin(Ecore_X_Window win,
char *data);
int _ecore_x_netwm_startup_info(Ecore_X_Window win,
char *data);
/* Fixes * Damage * Composite * DPMS */
void _ecore_x_fixes_init(void);
void _ecore_x_damage_init(void);
void _ecore_x_composite_init(void);
void _ecore_x_present_init(void);
void _ecore_x_dpms_init(void);
void _ecore_x_randr_init(void);
void _ecore_x_gesture_init(void);
void _ecore_x_atoms_init(void);
extern int _ecore_x_present_major;
extern int _ecore_x_xi2_opcode;
void _ecore_x_events_init(void);
void _ecore_x_events_shutdown(void);
void _ecore_x_input_init(void);
void _ecore_x_input_shutdown(void);
void _ecore_x_input_handler(XEvent *xevent);
/* from sync */
Expose device (e.g. pen) axis information to applications Summary: This patch set adds the necessary code to expose device axis state to applications. This was primarily written with graphics tablets in mind, which -- in addition to acting like a mouse -- also provide information about pen pressure, tilt, etc. Other devices could potentially benefit from this API as well: touchscreens, joysticks, knob controllers, "spaceballs", etc. Whenever an update to the device state is recieved, an "Axis update" event is synthesized. This event contains the updated information, typically scaled and normalized to a particular logical range (e.g. zero to one for pressure, -pi to pi radians for angles, etc.). Information about the tool which generated the event is also stored so that applications can disambiguate events from multiple devices (or in the case of multitouch screens, individual fingers). This API is only wired up for use with X11 at the moment. Support for other backends (e.g. Wayland) should be easy to add for those familiar them. **Note**: The following is a list of changes from the "v2" patches originally sent to the mailinglist //Define and implement new Ecore_Event_Axis_Update events// * Harcode axis labels instead of including xserver-properties.h * Use C89-style comments * Use doxygen comments * Update comment text to note axes with unbounded/undefined ranges/units * Create "Ecore_Axis" and "Ecore_Axis_Label" typedefs * Reference typedef'd instead of raw types * Adjust how we count through valuators to support tilt/az * Add support for tilt and azimuth * Tweak memory management in case number of valuators differ * Expand TWIST axis normalization to declared range * Only normalize TWIST axis if resolution == 1 (wacom bug) * Cache label atoms on first use to minimize round-trips //Implement EVAS_CALLBACK_AXIS_UPDATE event and friends// * Update to doxygen comments * Update comment text to note axes with unbounded/undefined ranges/units * Typedef 'Evas_Axis_Label', 'Evas_Axis' * Move typedef for 'Evas_Event_Axis_Update' * Reference typedef'd instead of raw types //Wire the Ecore and Evas implementations of axis update events together// * Expose ecore_event_evas_axis_update in Ecore_Input_Evas.h * Move ecore_event_evas_axis_update to more logical position //DEBUG: Add axis update logging to evas-multi-touch.c// * Removed from patch set //Make evas-multi-touch demo use new axis functionality// * Have pressure adjust rectangle brightness instead of size * Use more available axis data when rendering rectangle (azimuth, tilt, twist) Test Plan: The evas-multi-touch demo was updated to support axis update events. A graphics tablet was then used to verify that the pressure, azimuth, tilt, and twist data was coming through correctly. Reviewers: cedric, raster Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D1514 Conflicts: src/lib/ecore_input/Ecore_Input.h Carsten Haitzler - ** fixed forward enum typedefs (make things unhappy) ** fixed conflict above ** fixed wrong param type for _evas_canvas_event_feed_axis_update() ** fixed @sinces to be 1.13 ** fixed formatting/indeting ** fixed order of operation reliance in if's with ()'s to be clear ** fixed functions to be static that should have been
2014-11-24 19:07:50 -08:00
void
_ecore_x_axis_update(Ecore_Window window,
Ecore_Window event_window,
Ecore_Window root_window,
unsigned int timestamp,
int devid,
int toolid,
int naxis,
Ecore_Axis *axis);
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);
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);
void _ecore_x_modifiers_get(void);
KeySym _ecore_x_XKeycodeToKeysym(Display *display, KeyCode keycode, int index);
int _ecore_x_shutdown(void);
//#define LOGFNS 1
#ifdef LOGFNS
#include <stdio.h>
#define LOGFN(fl, ln, fn) printf("-ECORE-X: %25s: %5i - %s\n", fl, ln, fn);
2010-08-02 10:47:49 -07:00
#else /* ifdef LOGFNS */
#define LOGFN(fl, ln, fn)
2010-08-02 10:47:49 -07:00
#endif /* ifdef LOGFNS */
#ifdef EAPI
# undef EAPI
#endif // ifdef EAPI
#ifdef __GNUC__
# if __GNUC__ >= 4
# define EAPI __attribute__ ((visibility("default")))
# else // if __GNUC__ >= 4
# define EAPI
# endif // if __GNUC__ >= 4
#else // ifdef __GNUC__
# define EAPI
#endif // ifdef __GNUC__
EAPI void ecore_x_window_root_properties_select(void);
#undef EAPI
#define EAPI
2010-08-02 10:47:49 -07:00
#endif /* ifndef _ECORE_X_PRIVATE_H */