include: untangle events.h from the SDK headers.

InternalEvents shouldn't be used anywhere outside the X server itself. Split
up into events.h for opaque typedefs for the events needed by various
headers and eventstr.h for the actual struct definitions.

eventstr.h must only be included by code that requires internal events and
is not part of the SDK.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2009-07-27 16:54:33 +10:00
parent fad5f96c01
commit 4e9b2938cd
17 changed files with 256 additions and 211 deletions

View File

@ -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"

View File

@ -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>

View File

@ -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"

View File

@ -162,6 +162,7 @@ typedef const char *string;
#include "geext.h"
#include "geint.h"
#include "eventstr.h"
#include "enterleave.h"
#include "eventconvert.h"

View File

@ -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>

View File

@ -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)

View File

@ -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"

View File

@ -72,6 +72,7 @@
#include "exevents.h" /* AddInputDevice */
#include "exglobals.h"
#include "eventstr.h"
#include "extnsionst.h"

View File

@ -65,4 +65,4 @@ AM_CFLAGS = $(DIX_CFLAGS)
EXTRA_DIST = \
dix-config-apple-verbatim.h \
eventconvert.h
eventconvert.h eventstr.h

View File

@ -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,
typedef struct _DeviceEvent DeviceEvent;
typedef struct _DeviceChangedEvent DeviceChangedEvent;
#if XFreeXDGA
ET_DGAEvent,
typedef struct _DGAEvent 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;
#if XFreeXDGA
DGAEvent dga;
#endif
RawDeviceEvent raw;
} InternalEvent;
typedef struct _RawDeviceEvent RawDeviceEvent;
typedef union _InternalEvent InternalEvent;
#endif

236
include/eventstr.h Normal file
View File

@ -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

View File

@ -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;

View File

@ -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"

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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>