summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-01-23 15:37:23 +1100
committerPeter Hutterer <peter.hutterer@who-t.net>2009-02-23 17:52:38 +1000
commite7867d12541ef9683d5d7fc766e918c13a742981 (patch)
treeb1cac26eba40a1640a9b066515fbc36580aa1621 /include
parent10dcf3ed9c543a6811340567e586ec0e476fcf61 (diff)
include: add XInternalEvent.
This is the event we want to feed into the EQ and process on the way through. Only applies for input events for now. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'include')
-rw-r--r--include/Makefile.am2
-rw-r--r--include/events.h179
-rw-r--r--include/input.h1
3 files changed, 181 insertions, 1 deletions
diff --git a/include/Makefile.am b/include/Makefile.am
index cb0b2934c..09300fe2d 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -57,7 +57,7 @@ sdk_HEADERS = \
xkbrules.h \
xserver-properties.h
-nodist_sdk_HEADERS = xorg-server.h
+nodist_sdk_HEADERS = xorg-server.h events.h
endif
AM_CFLAGS = $(DIX_CFLAGS)
diff --git a/include/events.h b/include/events.h
new file mode 100644
index 000000000..4b69246ab
--- /dev/null
+++ b/include/events.h
@@ -0,0 +1,179 @@
+/*
+ * 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 EVENTS_H
+#define EVENTS_H
+
+/**
+ * @file 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.
+ */
+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,
+ ET_Internal = 0xFF /* First byte */
+} EventType;
+
+/**
+ * Device event, 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.
+ *
+ * @header: Always ET_Internal
+ * @type: One of EventType.
+ * @length: Length in bytes.
+ * @time: Time in ms.
+ * @deviceid: Device to post this event for.
+ * @sourceid: The physical source device.
+ * @key: Keycode of the event
+ * @button: Button number of the event.
+ * @root_x: Position relative to root window in 16.16 fixed point
+ * screen coordinates
+ * @root_y: Position relative to root window in 16.16 fixed point
+ * screen coordinates
+ * @buttons: Button mask.
+ * @valuators.mask: Valuator mask.
+ * @valuators.mode: Valuator mode. Bit set for Absolute mode, unset for relative.
+ * @valuators.data: Valuator data. Only set for valuators listed in @mask.
+ * @mods.base: XKB Base modifiers
+ * @mods.latched: XKB latched modifiers.
+ * @mods.locked: XKB locked modifiers.
+ * @group.base: XKB Base modifiers
+ * @group.latched: XKB latched modifiers.
+ * @group.locked: XKB locked modifiers.
+ * @root: Root window of the event.
+ * @corestate: Core key/button state BEFORE this event applied.
+ */
+typedef struct
+{
+ unsigned char header;
+ int type;
+ int length;
+ Time time;
+ int deviceid;
+ int sourceid;
+ union {
+ uint32_t button;
+ uint32_t key;
+ } detail;
+ uint32_t root_x;
+ uint32_t root_y;
+ uint8_t buttons[(MAX_BUTTONS + 7)/8];
+ struct {
+ uint8_t mask[(MAX_VALUATORS + 7)/8];
+ uint8_t mode[(MAX_VALUATORS + 7)/8];
+ uint32_t data[MAX_VALUATORS];
+ } valuators;
+ struct {
+ uint32_t base;
+ uint32_t latched;
+ uint32_t locked;
+ } mods;
+ struct {
+ uint8_t base;
+ uint8_t latched;
+ uint8_t locked;
+ } group;
+ Window root;
+ int corestate;
+} DeviceEvent;
+
+
+/* Flags used in DeviceChangedEvent to signal if new/old slave is present */
+#define HAS_OLD_SLAVE 0x1
+#define HAS_NEW_SLAVE 0x2
+
+/**
+ * DeviceChangedEvent, sent whenever a device's capabilities have changed.
+ *
+ * @header: Always ET_Internal
+ * @type: ET_DeviceChanged
+ * @length: Length in bytes
+ * @time: Time in ms.
+ * @flags: Mask of HAS_OLD_SLAVE (if @old_slaveid specifies the previous
+ * SD) and HAS_NEW_SLAVE (if @new_slaveid specifies the new SD).
+ * @old_slaveid: Specifies the device previously attached to the MD.
+ * @new_slaveid: Specifies the device now attached to the SD.
+ */
+typedef struct
+{
+ unsigned char header;
+ int type;
+ int length;
+ Time time;
+ int flags;
+ int old_slaveid;
+ int new_slaveid;
+ /* FIXME: add the new capabilities here */
+} DeviceChangedEvent;
+
+/**
+ * InternalEvent, event type used inside the X server for input event
+ * processing.
+ *
+ * @header: Always ET_Internal
+ * @type: One of ET_*
+ * @length: Length in bytes
+ * @time: Time in ms.
+ */
+typedef struct
+{
+ union {
+ struct {
+ unsigned char header;
+ int type;
+ int length;
+ Time time;
+ } any;
+ DeviceEvent device;
+ DeviceChangedEvent changed;
+ } u;
+} InternalEvent;
+
+#endif
diff --git a/include/input.h b/include/input.h
index 3b7a173ab..180423591 100644
--- a/include/input.h
+++ b/include/input.h
@@ -75,6 +75,7 @@ SOFTWARE.
/* Maximum number of valuators, divided by six, rounded up, to get number
* of events. */
#define MAX_VALUATOR_EVENTS 6
+#define MAX_BUTTONS 256 /* completely arbitrarily chosen */
#define NO_AXIS_LIMITS -1