diff options
-rw-r--r-- | Xi/exevents.c | 1 | ||||
-rw-r--r-- | dix/devices.c | 1 | ||||
-rw-r--r-- | dix/eventconvert.c | 2 | ||||
-rw-r--r-- | dix/events.c | 1 | ||||
-rw-r--r-- | dix/getevents.c | 2 | ||||
-rw-r--r-- | hw/kdrive/src/kinput.c | 1 | ||||
-rw-r--r-- | hw/xfree86/common/xf86DGA.c | 2 | ||||
-rw-r--r-- | hw/xfree86/common/xf86Xinput.c | 1 | ||||
-rw-r--r-- | include/Makefile.am | 2 | ||||
-rw-r--r-- | include/events.h | 210 | ||||
-rw-r--r-- | include/eventstr.h | 236 | ||||
-rw-r--r-- | include/input.h | 3 | ||||
-rw-r--r-- | mi/mieq.c | 1 | ||||
-rw-r--r-- | xkb/xkbAccessX.c | 1 | ||||
-rw-r--r-- | xkb/xkbActions.c | 1 | ||||
-rw-r--r-- | xkb/xkbPrKeyEv.c | 1 | ||||
-rw-r--r-- | xkb/xkbUtils.c | 1 |
17 files changed, 256 insertions, 211 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c index 984bc0718..5c432664e 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -76,6 +76,7 @@ SOFTWARE. #include "xace.h" #include "xiquerydevice.h" /* For List*Info */ #include "eventconvert.h" +#include "eventstr.h" #include <X11/extensions/XKBproto.h> #include "xkbsrv.h" diff --git a/dix/devices.c b/dix/devices.c index 4d006b1f2..32fd4451a 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -72,6 +72,7 @@ SOFTWARE. #include "swaprep.h" #include "dixevents.h" #include "mipointer.h" +#include "eventstr.h" #include <X11/extensions/XI.h> #include <X11/extensions/XI2.h> diff --git a/dix/eventconvert.c b/dix/eventconvert.c index 039a17f79..943178e99 100644 --- a/dix/eventconvert.c +++ b/dix/eventconvert.c @@ -42,7 +42,7 @@ #include "dix.h" #include "inputstr.h" #include "misc.h" -#include "events.h" +#include "eventstr.h" #include "exglobals.h" #include "eventconvert.h" #include "xiquerydevice.h" diff --git a/dix/events.c b/dix/events.c index f50229a91..a6a10758d 100644 --- a/dix/events.c +++ b/dix/events.c @@ -162,6 +162,7 @@ typedef const char *string; #include "geext.h" #include "geint.h" +#include "eventstr.h" #include "enterleave.h" #include "eventconvert.h" diff --git a/dix/getevents.c b/dix/getevents.c index 989564261..ffd749717 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -43,7 +43,7 @@ #include "globals.h" #include "dixevents.h" #include "mipointer.h" -#include "events.h" +#include "eventstr.h" #include "eventconvert.h" #include <X11/extensions/XKBproto.h> diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 5e7ff5376..318d233d4 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -46,6 +46,7 @@ #include "exevents.h" #include "extinit.h" #include "exglobals.h" +#include "eventstr.h" #include "xserver-properties.h" #define AtomFromName(x) MakeAtom(x, strlen(x), 1) diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c index 5716989f6..4509541a4 100644 --- a/hw/xfree86/common/xf86DGA.c +++ b/hw/xfree86/common/xf86DGA.c @@ -46,7 +46,7 @@ #include "xf86Xinput.h" #include "exglobals.h" #include "exevents.h" -#include "events.h" +#include "eventstr.h" #include "eventconvert.h" #include "mi.h" diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index b4169cf76..7b5904eaa 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -72,6 +72,7 @@ #include "exevents.h" /* AddInputDevice */ #include "exglobals.h" +#include "eventstr.h" #include "extnsionst.h" diff --git a/include/Makefile.am b/include/Makefile.am index 50b75c200..f8eef53e1 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -65,4 +65,4 @@ AM_CFLAGS = $(DIX_CFLAGS) EXTRA_DIST = \ dix-config-apple-verbatim.h \ - eventconvert.h + eventconvert.h eventstr.h diff --git a/include/events.h b/include/events.h index 4b0c6dcb4..9f6a94c5b 100644 --- a/include/events.h +++ b/include/events.h @@ -24,212 +24,12 @@ #ifndef EVENTS_H #define EVENTS_H - -/** - * @file events.h - * This file describes the event structures used internally by the X - * server during event generation and event processing. - * - * When are internal events used? - * Events from input devices are stored as internal events in the EQ and - * processed as internal events until late in the processing cycle. Only then - * do they switch to their respective wire events. - */ - -/** - * Event types. Used exclusively internal to the server, not visible on the - * protocol. - * - * Note: Keep KeyPress to Motion aligned with the core events. - * Keep ET_Raw* in the same order as KeyPress - Motion - */ -enum { - ET_KeyPress = 2, - ET_KeyRelease, - ET_ButtonPress, - ET_ButtonRelease, - ET_Motion, - ET_Enter, - ET_Leave, - ET_FocusIn, - ET_FocusOut, - ET_ProximityIn, - ET_ProximityOut, - ET_DeviceChanged, - ET_Hierarchy, -#if XFreeXDGA - ET_DGAEvent, -#endif - ET_RawKeyPress, - ET_RawKeyRelease, - ET_RawButtonPress, - ET_RawButtonRelease, - ET_RawMotion, - ET_Internal = 0xFF /* First byte */ -} EventType; - -#define CHECKEVENT(ev) if (ev && ((InternalEvent*)(ev))->any.header != 0xFF) \ - FatalError("Wrong event type %d.\n", \ - ((InternalEvent*)(ev))->any.header); - -/** - * Used for ALL input device events internal in the server until - * copied into the matching protocol event. - * - * Note: We only use the device id because the DeviceIntPtr may become invalid while - * the event is in the EQ. - */ -typedef struct -{ - unsigned char header; /**< Always ET_Internal */ - int type; /**< One of EventType */ - int length; /**< Length in bytes */ - Time time; /**< Time in ms */ - int deviceid; /**< Device to post this event for */ - int sourceid; /**< The physical source device */ - union { - uint32_t button; /**< Button number */ - uint32_t key; /**< Key code */ - } detail; - uint16_t root_x; /**< Pos relative to root window in integral data */ - float root_x_frac; /**< Pos relative to root window in frac part */ - uint16_t root_y; /**< Pos relative to root window in integral part */ - float root_y_frac; /**< Pos relative to root window in frac part */ - uint8_t buttons[(MAX_BUTTONS + 7)/8]; /**< Button mask */ - struct { - uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */ - uint8_t mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/ - uint32_t data[MAX_VALUATORS]; /**< Valuator data */ - int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */ - } valuators; - struct { - uint32_t base; /**< XKB base modifiers */ - uint32_t latched; /**< XKB latched modifiers */ - uint32_t locked; /**< XKB locked modifiers */ - uint32_t effective;/**< XKB effective modifiers */ - } mods; - struct { - uint8_t base; /**< XKB base group */ - uint8_t latched; /**< XKB latched group */ - uint8_t locked; /**< XKB locked group */ - uint8_t effective;/**< XKB effective group */ - } group; - Window root; /**< Root window of the event */ - int corestate; /**< Core key/button state BEFORE the event */ -} DeviceEvent; - - -/* Flags used in DeviceChangedEvent to signal if new/old slave is present. */ -#define DEVCHANGE_HAS_OLD_SLAVE 0x1 -#define DEVCHANGE_HAS_NEW_SLAVE 0x2 -/* Flags used in DeviceChangedEvent to signal whether the event was a - * pointer event or a keyboard event */ -#define DEVCHANGE_POINTER_EVENT 0x4 -#define DEVCHANGE_KEYBOARD_EVENT 0x8 -/* device capabilities changed */ -#define DEVCHANGE_DEVICE_CHANGE 0x10 - -/** - * Sent whenever a device's capabilities have changed. - */ -typedef struct -{ - unsigned char header; /**< Always ET_Internal */ - int type; /**< ET_DeviceChanged */ - int length; /**< Length in bytes */ - Time time; /**< Time in ms */ - int deviceid; /**< Device whose capabilities have changed */ - int flags; /**< Mask of ::HAS_OLD_SLAVE, ::HAS_NEW_SLAVE, - ::POINTER_EVENT, ::KEYBOARD_EVENT */ - /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously - * attached to this device. */ - int old_slaveid; - /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies device now - * attached to this device. */ - int new_slaveid; - - struct { - int num_buttons; /**< Number of buttons */ - Atom names[MAX_BUTTONS];/**< Button names */ - } buttons; - - int num_valuators; /**< Number of axes */ - struct { - uint32_t min; /**< Minimum value */ - uint32_t max; /**< Maximum value */ - /* FIXME: frac parts of min/max */ - uint32_t resolution; /**< Resolution counts/m */ - uint8_t mode; /**< Relative or Absolute */ - Atom name; /**< Axis name */ - } valuators[MAX_VALUATORS]; - - struct { - int min_keycode; - int max_keycode; - } keys; -} DeviceChangedEvent; - -#if XFreeXDGA -/** - * DGAEvent, used by DGA to intercept and emulate input events. - */ -typedef struct -{ - unsigned char header; /**< Always ET_Internal */ - int type; /**< ET_DGAEvent */ - int length; /**< Length in bytes */ - Time time; /**< Time in ms */ - int subtype; /**< KeyPress, KeyRelease, ButtonPress, - ButtonRelease, MotionNotify */ - int detail; /**< Relative x coordinate */ - int dx; /**< Relative x coordinate */ - int dy; /**< Relative y coordinate */ - int screen; /**< Screen number this event applies to */ - uint16_t state; /**< Core modifier/button state */ -} DGAEvent; -#endif - -/** - * Raw event, contains the data as posted by the device. - */ -typedef struct -{ - unsigned char header; /**< Always ET_Internal */ - int type; /**< ET_Raw */ - int length; /**< Length in bytes */ - Time time; /**< Time in ms */ - int deviceid; /**< Device to post this event for */ - int sourceid; /**< The physical source device */ - union { - uint32_t button; /**< Button number */ - uint32_t key; /**< Key code */ - } detail; - struct { - uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */ - int32_t data[MAX_VALUATORS]; /**< Valuator data */ - int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */ - int32_t data_raw[MAX_VALUATORS]; /**< Valuator data as posted */ - int32_t data_raw_frac[MAX_VALUATORS];/**< Fractional part for data_raw */ - } valuators; -} RawDeviceEvent; - -/** - * Event type used inside the X server for input event - * processing. - */ -typedef union { - struct { - unsigned char header; /**< Always ET_Internal */ - int type; /**< One of ET_* */ - int length; /**< Length in bytes */ - Time time; /**< Time in ms. */ - } any; - DeviceEvent device; - DeviceChangedEvent changed; +typedef struct _DeviceEvent DeviceEvent; +typedef struct _DeviceChangedEvent DeviceChangedEvent; #if XFreeXDGA - DGAEvent dga; +typedef struct _DGAEvent DGAEvent; #endif - RawDeviceEvent raw; -} InternalEvent; +typedef struct _RawDeviceEvent RawDeviceEvent; +typedef union _InternalEvent InternalEvent; #endif diff --git a/include/eventstr.h b/include/eventstr.h new file mode 100644 index 000000000..3eefc052f --- /dev/null +++ b/include/eventstr.h @@ -0,0 +1,236 @@ +/* + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifndef EVENTSTR_H +#define EVENTSTR_H + +#include <events.h> +/** + * @file events.h + * This file describes the event structures used internally by the X + * server during event generation and event processing. + * + * When are internal events used? + * Events from input devices are stored as internal events in the EQ and + * processed as internal events until late in the processing cycle. Only then + * do they switch to their respective wire events. + */ + +/** + * Event types. Used exclusively internal to the server, not visible on the + * protocol. + * + * Note: Keep KeyPress to Motion aligned with the core events. + * Keep ET_Raw* in the same order as KeyPress - Motion + */ +enum { + ET_KeyPress = 2, + ET_KeyRelease, + ET_ButtonPress, + ET_ButtonRelease, + ET_Motion, + ET_Enter, + ET_Leave, + ET_FocusIn, + ET_FocusOut, + ET_ProximityIn, + ET_ProximityOut, + ET_DeviceChanged, + ET_Hierarchy, +#if XFreeXDGA + ET_DGAEvent, +#endif + ET_RawKeyPress, + ET_RawKeyRelease, + ET_RawButtonPress, + ET_RawButtonRelease, + ET_RawMotion, + ET_Internal = 0xFF /* First byte */ +} EventType; + +#define CHECKEVENT(ev) if (ev && ((InternalEvent*)(ev))->any.header != 0xFF) \ + FatalError("Wrong event type %d.\n", \ + ((InternalEvent*)(ev))->any.header); + +/** + * Used for ALL input device events internal in the server until + * copied into the matching protocol event. + * + * Note: We only use the device id because the DeviceIntPtr may become invalid while + * the event is in the EQ. + */ +struct _DeviceEvent +{ + unsigned char header; /**< Always ET_Internal */ + int type; /**< One of EventType */ + int length; /**< Length in bytes */ + Time time; /**< Time in ms */ + int deviceid; /**< Device to post this event for */ + int sourceid; /**< The physical source device */ + union { + uint32_t button; /**< Button number */ + uint32_t key; /**< Key code */ + } detail; + uint16_t root_x; /**< Pos relative to root window in integral data */ + float root_x_frac; /**< Pos relative to root window in frac part */ + uint16_t root_y; /**< Pos relative to root window in integral part */ + float root_y_frac; /**< Pos relative to root window in frac part */ + uint8_t buttons[(MAX_BUTTONS + 7)/8]; /**< Button mask */ + struct { + uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */ + uint8_t mode[(MAX_VALUATORS + 7)/8]; /**< Valuator mode (Abs or Rel)*/ + uint32_t data[MAX_VALUATORS]; /**< Valuator data */ + int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */ + } valuators; + struct { + uint32_t base; /**< XKB base modifiers */ + uint32_t latched; /**< XKB latched modifiers */ + uint32_t locked; /**< XKB locked modifiers */ + uint32_t effective;/**< XKB effective modifiers */ + } mods; + struct { + uint8_t base; /**< XKB base group */ + uint8_t latched; /**< XKB latched group */ + uint8_t locked; /**< XKB locked group */ + uint8_t effective;/**< XKB effective group */ + } group; + Window root; /**< Root window of the event */ + int corestate; /**< Core key/button state BEFORE the event */ +}; + + +/* Flags used in DeviceChangedEvent to signal if new/old slave is present. */ +#define DEVCHANGE_HAS_OLD_SLAVE 0x1 +#define DEVCHANGE_HAS_NEW_SLAVE 0x2 +/* Flags used in DeviceChangedEvent to signal whether the event was a + * pointer event or a keyboard event */ +#define DEVCHANGE_POINTER_EVENT 0x4 +#define DEVCHANGE_KEYBOARD_EVENT 0x8 +/* device capabilities changed */ +#define DEVCHANGE_DEVICE_CHANGE 0x10 + +/** + * Sent whenever a device's capabilities have changed. + */ +struct _DeviceChangedEvent +{ + unsigned char header; /**< Always ET_Internal */ + int type; /**< ET_DeviceChanged */ + int length; /**< Length in bytes */ + Time time; /**< Time in ms */ + int deviceid; /**< Device whose capabilities have changed */ + int flags; /**< Mask of ::HAS_OLD_SLAVE, ::HAS_NEW_SLAVE, + ::POINTER_EVENT, ::KEYBOARD_EVENT */ + /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously + * attached to this device. */ + int old_slaveid; + /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies device now + * attached to this device. */ + int new_slaveid; + + struct { + int num_buttons; /**< Number of buttons */ + Atom names[MAX_BUTTONS];/**< Button names */ + } buttons; + + int num_valuators; /**< Number of axes */ + struct { + uint32_t min; /**< Minimum value */ + uint32_t max; /**< Maximum value */ + /* FIXME: frac parts of min/max */ + uint32_t resolution; /**< Resolution counts/m */ + uint8_t mode; /**< Relative or Absolute */ + Atom name; /**< Axis name */ + } valuators[MAX_VALUATORS]; + + struct { + int min_keycode; + int max_keycode; + } keys; +}; + +#if XFreeXDGA +/** + * DGAEvent, used by DGA to intercept and emulate input events. + */ +struct _DGAEvent +{ + unsigned char header; /**< Always ET_Internal */ + int type; /**< ET_DGAEvent */ + int length; /**< Length in bytes */ + Time time; /**< Time in ms */ + int subtype; /**< KeyPress, KeyRelease, ButtonPress, + ButtonRelease, MotionNotify */ + int detail; /**< Relative x coordinate */ + int dx; /**< Relative x coordinate */ + int dy; /**< Relative y coordinate */ + int screen; /**< Screen number this event applies to */ + uint16_t state; /**< Core modifier/button state */ +}; +#endif + +/** + * Raw event, contains the data as posted by the device. + */ +struct _RawDeviceEvent +{ + unsigned char header; /**< Always ET_Internal */ + int type; /**< ET_Raw */ + int length; /**< Length in bytes */ + Time time; /**< Time in ms */ + int deviceid; /**< Device to post this event for */ + int sourceid; /**< The physical source device */ + union { + uint32_t button; /**< Button number */ + uint32_t key; /**< Key code */ + } detail; + struct { + uint8_t mask[(MAX_VALUATORS + 7)/8]; /**< Valuator mask */ + int32_t data[MAX_VALUATORS]; /**< Valuator data */ + int32_t data_frac[MAX_VALUATORS]; /**< Fractional part for data */ + int32_t data_raw[MAX_VALUATORS]; /**< Valuator data as posted */ + int32_t data_raw_frac[MAX_VALUATORS];/**< Fractional part for data_raw */ + } valuators; +}; + +/** + * Event type used inside the X server for input event + * processing. + */ +union _InternalEvent { + struct { + unsigned char header; /**< Always ET_Internal */ + int type; /**< One of ET_* */ + int length; /**< Length in bytes */ + Time time; /**< Time in ms. */ + } any; + DeviceEvent device; + DeviceChangedEvent changed; +#if XFreeXDGA + DGAEvent dga; +#endif + RawDeviceEvent raw; +}; + +#endif diff --git a/include/input.h b/include/input.h index 40ba660f1..e962696cb 100644 --- a/include/input.h +++ b/include/input.h @@ -54,6 +54,7 @@ SOFTWARE. #include <X11/Xproto.h> #include "window.h" /* for WindowPtr */ #include "xkbrules.h" +#include "events.h" #define DEVICE_INIT 0 #define DEVICE_ON 1 @@ -96,8 +97,6 @@ SOFTWARE. #define RevertToFollowKeyboard 3 #endif -#include "events.h" - typedef unsigned long Leds; typedef struct _OtherClients *OtherClientsPtr; typedef struct _InputClients *InputClientsPtr; @@ -51,6 +51,7 @@ in this Software without prior written authorization from The Open Group. # include <X11/extensions/geproto.h> # include "extinit.h" # include "exglobals.h" +# include "eventstr.h" #ifdef DPMSExtension # include "dpmsproc.h" diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c index f0f757818..7df8e06cf 100644 --- a/xkb/xkbAccessX.c +++ b/xkb/xkbAccessX.c @@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "exglobals.h" #include <X11/extensions/XIproto.h> #include "inputstr.h" +#include "eventstr.h" #include <xkbsrv.h> #if !defined(WIN32) #include <sys/time.h> diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c index 5909b06d2..9c3184a83 100644 --- a/xkb/xkbActions.c +++ b/xkb/xkbActions.c @@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "misc.h" #include "inputstr.h" #include "exevents.h" +#include "eventstr.h" #include <xkbsrv.h> #include "xkb.h" #include <ctype.h> diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c index effb0ea3a..e01282d9b 100644 --- a/xkb/xkbPrKeyEv.c +++ b/xkb/xkbPrKeyEv.c @@ -36,6 +36,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "misc.h" #include "inputstr.h" #include "exevents.h" +#include "eventstr.h" #include <xkbsrv.h> #include <ctype.h> #include "events.h" diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c index e25247f4e..06da1d55c 100644 --- a/xkb/xkbUtils.c +++ b/xkb/xkbUtils.c @@ -62,6 +62,7 @@ DEALINGS IN THE SOFTWARE. #include <X11/keysym.h> #include "misc.h" #include "inputstr.h" +#include "eventstr.h" #define XKBSRV_NEED_FILE_FUNCS #include <xkbsrv.h> |