summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-10-19 10:22:51 +0930
committerPeter Hutterer <peter@cs.unisa.edu.au>2007-10-19 10:22:51 +0930
commit6037b37a5bf03f0b38db6a83fe1bc48551b8363c (patch)
tree1402fdb949daa66dfdba220d7303815472222d37
parent52e2f24b3a21741d2fb0614642fd5b12b72c0d3d (diff)
Add XChangeDeviceHierarchy and its components.
-rw-r--r--XI.h13
-rw-r--r--XInput.h37
-rw-r--r--XIproto.h54
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;
/**********************************************************
*