#ifndef INPUT_H
#define INPUT_H
#include "misc.h"
#include "screenint.h"
#include <X11/Xmd.h>
#include <X11/Xproto.h>
#include <stdint.h>
#include "window.h"
#include "xkbrules.h"
#include "events.h"
#define DEVICE_INIT 0
#define DEVICE_ON 1
#define DEVICE_OFF 2
#define DEVICE_CLOSE 3
#define POINTER_RELATIVE (1 << 1)
#define POINTER_ABSOLUTE (1 << 2)
#define POINTER_ACCELERATE (1 << 3)
#define POINTER_SCREEN (1 << 4)
#define POINTER_NORAW (1 << 5)
#define PtrAccelNoOp 0
#define PtrAccelPredictable 1
#define PtrAccelLightweight 2
#define PtrAccelDefault PtrAccelPredictable
#define MAX_VALUATORS 36
#define MAX_VALUATOR_EVENTS 6
#define MAX_BUTTONS 256
#define NO_AXIS_LIMITS -1
#define MAP_LENGTH 256
#define DOWN_LENGTH 32
#define NullGrab ((GrabPtr)NULL)
#define PointerRootWin ((WindowPtr)PointerRoot)
#define NoneWin ((WindowPtr)None)
#define NullDevice ((DevicePtr)NULL)
#ifndef FollowKeyboard
#define FollowKeyboard 3
#endif
#ifndef FollowKeyboardWin
#define FollowKeyboardWin ((WindowPtr) FollowKeyboard)
#endif
#ifndef RevertToFollowKeyboard
#define RevertToFollowKeyboard 3
#endif
typedef unsigned long Leds;
typedef struct _OtherClients *OtherClientsPtr;
typedef struct _InputClients *InputClientsPtr;
typedef struct _DeviceIntRec *DeviceIntPtr;
typedef struct _ValuatorClassRec *ValuatorClassPtr;
typedef struct _ClassesRec *ClassesPtr;
typedef struct _SpriteRec *SpritePtr;
typedef union _GrabMask GrabMask;
typedef struct _EventList {
xEvent* event;
int evlen;
} EventList, *EventListPtr;
extern EventListPtr InputEventList;
extern int InputEventListLen;
typedef int (*DeviceProc)(
DeviceIntPtr ,
int );
typedef void (*ProcessInputProc)(
InternalEvent * ,
DeviceIntPtr );
typedef Bool (*DeviceHandleProc)(
DeviceIntPtr ,
void*
);
typedef void (*DeviceUnwrapProc)(
DeviceIntPtr ,
DeviceHandleProc ,
void*
);
typedef void (*PointerAccelSchemeProc)(
DeviceIntPtr ,
int ,
int ,
int* ,
int );
typedef void (*DeviceCallbackProc)(
DeviceIntPtr );
typedef struct _DeviceRec {
pointer devicePrivate;
ProcessInputProc processInputProc;
ProcessInputProc realInputProc;
ProcessInputProc enqueueInputProc;
Bool on;
} DeviceRec, *DevicePtr;
typedef struct _ValuatorMask ValuatorMask;
typedef struct {
int click, bell, bell_pitch, bell_duration;
Bool autoRepeat;
unsigned char autoRepeats[32];
Leds leds;
unsigned char id;
} KeybdCtrl;
typedef struct {
KeySym *map;
KeyCode minKeyCode,
maxKeyCode;
int mapWidth;
} KeySymsRec, *KeySymsPtr;
typedef struct {
int num, den, threshold;
unsigned char id;
} PtrCtrl;
typedef struct {
int resolution, min_value, max_value;
int integer_displayed;
unsigned char id;
} IntegerCtrl;
typedef struct {
int max_symbols, num_symbols_supported;
int num_symbols_displayed;
KeySym *symbols_supported;
KeySym *symbols_displayed;
unsigned char id;
} StringCtrl;
typedef struct {
int percent, pitch, duration;
unsigned char id;
} BellCtrl;
typedef struct {
Leds led_values;
Mask led_mask;
unsigned char id;
} LedCtrl;
extern _X_EXPORT KeybdCtrl defaultKeyboardControl;
extern _X_EXPORT PtrCtrl defaultPointerControl;
typedef struct _InputOption {
char *key;
char *value;
struct _InputOption *next;
} InputOption;
typedef struct _InputAttributes {
char *product;
char *vendor;
char *device;
char *pnp_id;
char *usb_id;
char **tags;
uint32_t flags;
} InputAttributes;
#define ATTR_KEYBOARD (1<<0)
#define ATTR_POINTER (1<<1)
#define ATTR_JOYSTICK (1<<2)
#define ATTR_TABLET (1<<3)
#define ATTR_TOUCHPAD (1<<4)
#define ATTR_TOUCHSCREEN (1<<5)
#define KEY_PROCESSED 1
#define BUTTON_PROCESSED 1
#define KEY_POSTED 2
#define BUTTON_POSTED 2
extern void set_key_down(DeviceIntPtr pDev, int key_code, int type);
extern void set_key_up(DeviceIntPtr pDev, int key_code, int type);
extern int key_is_down(DeviceIntPtr pDev, int key_code, int type);
extern void set_button_down(DeviceIntPtr pDev, int button, int type);
extern void set_button_up(DeviceIntPtr pDev, int button, int type);
extern int button_is_down(DeviceIntPtr pDev, int button, int type);
extern void InitCoreDevices(void);
extern void InitXTestDevices(void);
extern _X_EXPORT DeviceIntPtr AddInputDevice(
ClientPtr ,
DeviceProc ,
Bool );
extern _X_EXPORT Bool EnableDevice(
DeviceIntPtr ,
BOOL );
extern _X_EXPORT Bool ActivateDevice(
DeviceIntPtr ,
BOOL );
extern _X_EXPORT Bool DisableDevice(
DeviceIntPtr ,
BOOL );
extern int InitAndStartDevices(void);
extern void CloseDownDevices(void);
extern void UndisplayDevices(void);
extern _X_EXPORT int RemoveDevice(
DeviceIntPtr ,
BOOL );
extern _X_EXPORT int NumMotionEvents(void);
extern _X_EXPORT int dixLookupDevice(
DeviceIntPtr * ,
int ,
ClientPtr ,
Mask );
extern _X_EXPORT void QueryMinMaxKeyCodes(
KeyCode* ,
KeyCode* );
extern _X_EXPORT Bool SetKeySymsMap(
KeySymsPtr ,
KeySymsPtr );
extern _X_EXPORT Bool InitButtonClassDeviceStruct(
DeviceIntPtr ,
int ,
Atom* ,
CARD8* );
extern _X_INTERNAL ValuatorClassPtr AllocValuatorClass(
ValuatorClassPtr src,
int numAxes);
extern _X_EXPORT Bool InitValuatorClassDeviceStruct(
DeviceIntPtr ,
int ,
Atom* ,
int ,
int );
extern _X_EXPORT Bool InitPointerAccelerationScheme(
DeviceIntPtr ,
int );
extern _X_EXPORT Bool InitAbsoluteClassDeviceStruct(
DeviceIntPtr );
extern _X_EXPORT Bool InitFocusClassDeviceStruct(
DeviceIntPtr );
typedef void (*BellProcPtr)(
int ,
DeviceIntPtr ,
pointer ,
int);
typedef void (*KbdCtrlProcPtr)(
DeviceIntPtr ,
KeybdCtrl * );
typedef void (*PtrCtrlProcPtr)(
DeviceIntPtr ,
PtrCtrl * );
extern _X_EXPORT Bool InitPtrFeedbackClassDeviceStruct(
DeviceIntPtr ,
PtrCtrlProcPtr );
typedef void (*StringCtrlProcPtr)(
DeviceIntPtr ,
StringCtrl * );
extern _X_EXPORT Bool InitStringFeedbackClassDeviceStruct(
DeviceIntPtr ,
StringCtrlProcPtr ,
int ,
int ,
KeySym* );
typedef void (*BellCtrlProcPtr)(
DeviceIntPtr ,
BellCtrl * );
extern _X_EXPORT Bool InitBellFeedbackClassDeviceStruct(
DeviceIntPtr ,
BellProcPtr ,
BellCtrlProcPtr );
typedef void (*LedCtrlProcPtr)(
DeviceIntPtr ,
LedCtrl * );
extern _X_EXPORT Bool InitLedFeedbackClassDeviceStruct(
DeviceIntPtr ,
LedCtrlProcPtr );
typedef void (*IntegerCtrlProcPtr)(
DeviceIntPtr ,
IntegerCtrl * );
extern _X_EXPORT Bool InitIntegerFeedbackClassDeviceStruct(
DeviceIntPtr ,
IntegerCtrlProcPtr );
extern _X_EXPORT Bool InitPointerDeviceStruct(
DevicePtr ,
CARD8* ,
int ,
Atom* ,
PtrCtrlProcPtr ,
int ,
int ,
Atom* );
extern _X_EXPORT Bool InitKeyboardDeviceStruct(
DeviceIntPtr ,
XkbRMLVOSet * ,
BellProcPtr ,
KbdCtrlProcPtr );
extern int ApplyPointerMapping(
DeviceIntPtr ,
CARD8 * ,
int ,
ClientPtr );
extern Bool BadDeviceMap(
BYTE* ,
int ,
unsigned ,
unsigned ,
XID* );
extern void NoteLedState(
DeviceIntPtr ,
int ,
Bool );
extern void MaybeStopHint(
DeviceIntPtr ,
ClientPtr );
extern void ProcessPointerEvent(
InternalEvent* ,
DeviceIntPtr );
extern void ProcessKeyboardEvent(
InternalEvent* ,
DeviceIntPtr );
extern Bool LegalModifier(
unsigned int ,
DeviceIntPtr );
extern _X_EXPORT void ProcessInputEvents(void);
extern _X_EXPORT void InitInput(
int ,
char ** );
extern _X_EXPORT void CloseInput(void);
extern _X_EXPORT int GetMaximumEventsNum(void);
extern _X_EXPORT int GetEventList(EventListPtr* list);
extern _X_EXPORT EventListPtr InitEventList(int num_events);
extern _X_EXPORT void FreeEventList(EventListPtr list, int num_events);
extern void CreateClassesChangedEvent(EventListPtr event,
DeviceIntPtr master,
DeviceIntPtr slave,
int type);
extern EventListPtr UpdateFromMaster(
EventListPtr events,
DeviceIntPtr pDev,
int type,
int *num_events);
extern _X_EXPORT int GetPointerEvents(
EventListPtr events,
DeviceIntPtr pDev,
int type,
int buttons,
int flags,
const ValuatorMask *mask);
extern _X_EXPORT int GetKeyboardEvents(
EventListPtr events,
DeviceIntPtr pDev,
int type,
int key_code);
extern int GetKeyboardValuatorEvents(
EventListPtr events,
DeviceIntPtr pDev,
int type,
int key_code,
const ValuatorMask *mask);
extern int GetProximityEvents(
EventListPtr events,
DeviceIntPtr pDev,
int type,
const ValuatorMask *mask);
extern void PostSyntheticMotion(
DeviceIntPtr pDev,
int x,
int y,
int screen,
unsigned long time);
extern _X_EXPORT int GetMotionHistorySize(
void);
extern _X_EXPORT void AllocateMotionHistory(
DeviceIntPtr pDev);
extern _X_EXPORT int GetMotionHistory(
DeviceIntPtr pDev,
xTimecoord **buff,
unsigned long start,
unsigned long stop,
ScreenPtr pScreen,
BOOL core);
extern void ReleaseButtonsAndKeys(DeviceIntPtr dev);
extern int AttachDevice(ClientPtr client,
DeviceIntPtr slave,
DeviceIntPtr master);
extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
extern DeviceIntPtr GetMaster(DeviceIntPtr dev, int type);
extern _X_EXPORT int AllocDevicePair(ClientPtr client,
char* name,
DeviceIntPtr* ptr,
DeviceIntPtr* keybd,
DeviceProc ptr_proc,
DeviceProc keybd_proc,
Bool master);
extern void DeepCopyDeviceClasses(DeviceIntPtr from,
DeviceIntPtr to,
DeviceChangedEvent *dce);
extern _X_EXPORT int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
KeyCode **modkeymap, int *max_keys_per_mod);
extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
int max_keys_per_mod);
extern int AllocXTestDevice(ClientPtr client,
char* name,
DeviceIntPtr* ptr,
DeviceIntPtr* keybd,
DeviceIntPtr master_ptr,
DeviceIntPtr master_keybd);
extern BOOL IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master);
extern DeviceIntPtr GetXTestDevice(DeviceIntPtr master);
extern void SendDevicePresenceEvent(int deviceid, int type);
extern _X_EXPORT InputAttributes *DuplicateInputAttributes(InputAttributes *attrs);
extern _X_EXPORT void FreeInputAttributes(InputAttributes *attrs);
extern Mask GetEventMask(DeviceIntPtr dev, xEvent* ev, InputClientsPtr clients);
extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);
extern Mask GetWindowXI2Mask(DeviceIntPtr dev, WindowPtr win, xEvent* ev);
void FixUpEventFromWindow(SpritePtr pSprite,
xEvent *xE,
WindowPtr pWin,
Window child,
Bool calcChild);
extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y);
extern int EventIsDeliverable(DeviceIntPtr dev, InternalEvent* event,
WindowPtr win);
#define XI_MASK (1 << 0)
#define CORE_MASK (1 << 1)
#define DONT_PROPAGATE_MASK (1 << 2)
#define XI2_MASK (1 << 3)
extern _X_EXPORT int NewInputDeviceRequest(
InputOption *options,
InputAttributes *attrs,
DeviceIntPtr *dev);
extern _X_EXPORT void DeleteInputDeviceRequest(
DeviceIntPtr dev);
extern _X_EXPORT void DDXRingBell(
int volume,
int pitch,
int duration);
#define VALUATOR_MODE_ALL_AXES -1
extern _X_HIDDEN int valuator_get_mode(DeviceIntPtr dev, int axis);
extern _X_HIDDEN void valuator_set_mode(DeviceIntPtr dev, int axis, int mode);
extern Bool EnableCursor;
extern _X_EXPORT ValuatorMask *valuator_mask_new(int num_valuators);
extern _X_EXPORT void valuator_mask_free(ValuatorMask **mask);
extern _X_EXPORT void valuator_mask_set_range(ValuatorMask *mask,
int first_valuator, int num_valuators,
const int* valuators);
extern _X_EXPORT void valuator_mask_set(ValuatorMask *mask,
int valuator,
int data);
extern _X_EXPORT void valuator_mask_zero(ValuatorMask *mask);
extern _X_EXPORT int valuator_mask_size(const ValuatorMask *mask);
extern _X_EXPORT int valuator_mask_isset(const ValuatorMask *mask, int bit);
extern _X_EXPORT void valuator_mask_unset(ValuatorMask *mask, int bit);
extern _X_EXPORT int valuator_mask_num_valuators(const ValuatorMask *mask);
extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest,
const ValuatorMask *src);
extern _X_EXPORT int valuator_mask_get(const ValuatorMask *mask, int valnum);
#endif