From 6037b37a5bf03f0b38db6a83fe1bc48551b8363c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 19 Oct 2007 10:22:51 +0930 Subject: [PATCH] Add XChangeDeviceHierarchy and its components. --- XI.h | 13 ++++++++++++- XInput.h | 37 ++++++++++++++++++++++++++++++++++--- XIproto.h | 54 +++++++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 93 insertions(+), 11 deletions(-) diff --git a/XI.h b/XI.h index 43b8745..cf0b234 100644 --- a/XI.h +++ b/XI.h @@ -114,7 +114,7 @@ SOFTWARE. #define sz_xQueryDevicePointerReply 32 #define sz_xWarpDevicePointerReq 28 #define sz_xChangeDeviceCursorReq 16 -#define sz_xChangePointerKeyboardPairingReq 8 +#define sz_xChangeDeviceHierarchyReq 8 #define sz_xRegisterPairingClientReq 8 #define sz_xRegisterPairingClientReply 32 #define sz_xGrabAccessControlReq 8 @@ -294,12 +294,23 @@ SOFTWARE. #define WindowAccessClearAll \ WindowAccessClearPerm | WindowAccessClearDeny | WindowAccessClearRule +/* Device presence notify states */ #define DeviceAdded 0 #define DeviceRemoved 1 #define DeviceEnabled 2 #define DeviceDisabled 3 #define DeviceUnrecoverable 4 + +/* ChangeHierarchy constants */ +#define CH_CreateMasterDevice 1 +#define CH_RemoveMasterDevice 2 +#define CH_ChangeAttachment 3 + +#define AttachToMaster 1 +#define Floating 2 + +/* XI Errors */ #define XI_BadDevice 0 #define XI_BadEvent 1 #define XI_BadMode 2 diff --git a/XInput.h b/XInput.h index 3d1da54..2167c21 100644 --- a/XInput.h +++ b/XInput.h @@ -1018,6 +1018,37 @@ typedef struct { char buttons[32]; } XButtonState; + +/******************************************************************* + * + */ + +typedef struct { + int type; +} XAnyHierarchyChangeInfo; + +typedef struct { + int type; + char* name; + Bool sendCore; + Bool enable; +} XCreateMasterInfo; + +typedef struct { + int type; + XDevice* device; + int returnMode; /* AttachToMaster, Floating */ + XDevice* returnPointer; + XDevice* returnKeyboard; +} XRemoveMasterInfo; + +typedef struct { + int type; + XDevice* device; + int changeMode; /* AttachToMaster, Floating */ + XDevice* newMaster; +} XChangeAttachmentInfo; + /******************************************************************* * * Function definitions. @@ -1354,10 +1385,10 @@ extern Status XUndefineDeviceCursor( Window /* win */ ); -extern Status XChangePointerKeyboardPairing( +extern Status XChangeDeviceHierarchy( Display* /* display */, - XDevice* /* pointer */, - XDevice* /* keyboard*/ + int /* num_changes */, + XAnyHierarchyChangeInfo** /* changes*/ ); extern Bool XGetPairedPointer( diff --git a/XIproto.h b/XIproto.h index 3e233d3..fc7e5a2 100644 --- a/XIproto.h +++ b/XIproto.h @@ -168,7 +168,7 @@ struct tmask #define X_QueryDevicePointer 36 #define X_WarpDevicePointer 37 #define X_ChangeDeviceCursor 38 -#define X_ChangePointerKeyboardPairing 39 +#define X_ChangeDeviceHierarchy 39 #define X_RegisterPairingClient 40 #define X_GrabAccessControl 41 #define X_ChangeWindowAccess 42 @@ -1513,18 +1513,58 @@ typedef struct { /********************************************************** * - * ChangePointerKeyboardPairing. + * ChangeDeviceHierarchy * */ typedef struct { CARD8 reqType; /* input extension major code */ - CARD8 ReqType; /* always X_ChangePointerKeyboardPairing */ + CARD8 ReqType; /* always X_ChangeDeviceHierarchy */ CARD16 length B16; - CARD8 pointer; /* ID of pointer devices */ - CARD8 keyboard; /* ID of keyboard device */ - CARD16 pad0; -} xChangePointerKeyboardPairingReq; + CARD8 num_changes; + CARD8 pad0; + CARD16 pad1 B16; +} xChangeDeviceHierarchyReq; + +typedef struct { + CARD16 type B16; + CARD16 length B16; /* in bytes */ +} xAnyHierarchyChangeInfo; + +/* Create a new master device. + * Name of new master follows struct (4-byte padded) + */ +typedef struct { + CARD16 type B16; /* Always CH_CreateMasterDevice */ + CARD16 length B16; /* 8 + (namelen + padding) */ + CARD16 namelen; + CARD8 sendCore; + CARD8 enable; +} xCreateMasterInfo; + +/* Delete a master device. Will automatically delete the master device paired + * with the given master device. + */ +typedef struct { + CARD16 type B16; /* Always CH_RemoveMasterDevice */ + CARD16 length B16; /* 8 */ + CARD8 deviceid; + CARD8 returnMode; /* AttachToMaster, Floating */ + CARD8 returnPointer; /* Pointer to attach slave ptr devices to */ + CARD8 returnKeyboard; /* keyboard to attach slave keybd devices to*/ +} xRemoveMasterInfo; + +/* Change a device's attachment. + * NewMaster has to be of same type (pointer->pointer, keyboard->keyboard); + */ +typedef struct { + CARD16 type B16; /* Always CH_ChangeAttachment */ + CARD16 length B16; /* 8 */ + CARD8 deviceid; + CARD8 changeMode; /* AttachToMaster, Floating */ + CARD8 newMaster; /* id of new master device */ + CARD8 pad0; +} xChangeAttachmentInfo; /********************************************************** * -- 2.7.4