diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2013-05-30 13:00:07 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2013-05-30 13:00:07 +0000 |
commit | e33b9b00976c5d2d9e993f2784f4795cbba441b2 (patch) | |
tree | eb5827ea2a7f5fc1e20f1303738c67cf9c384125 /proto | |
parent | aad133091f7abdfa7ad27c1ea3ba6794c3be6948 (diff) |
update to inputproto 2.3
Diffstat (limited to 'proto')
-rw-r--r-- | proto/inputproto/ChangeLog | 152 | ||||
-rw-r--r-- | proto/inputproto/XI2.h | 13 | ||||
-rw-r--r-- | proto/inputproto/XI2proto.h | 53 | ||||
-rw-r--r-- | proto/inputproto/configure.ac | 3 | ||||
-rw-r--r-- | proto/inputproto/specs/XI2proto.txt | 364 |
5 files changed, 522 insertions, 63 deletions
diff --git a/proto/inputproto/ChangeLog b/proto/inputproto/ChangeLog index de735ff3d..09e222b87 100644 --- a/proto/inputproto/ChangeLog +++ b/proto/inputproto/ChangeLog @@ -1,3 +1,155 @@ +commit f33a329026c9f2eaa5fa436543e4feb0e54b685d +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Thu Mar 7 10:42:39 2013 +1000 + + inputproto 2.3 + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit f8428123019e7357891bbfc0aef21dbb4d0db10f +Author: Colin Walters <walters@verbum.org> +Date: Wed Jan 4 17:37:06 2012 -0500 + + autogen.sh: Implement GNOME Build API + + http://people.gnome.org/~walters/docs/build-api.txt + + Signed-off-by: Adam Jackson <ajax@redhat.com> + +commit 8cad031f9f583089dd33bae41dfa8a7e0d8a71f4 +Author: Adam Jackson <ajax@redhat.com> +Date: Tue Jan 15 14:01:10 2013 -0500 + + configure: Remove AM_MAINTAINER_MODE + + Signed-off-by: Adam Jackson <ajax@redhat.com> + +commit 4832c94775ee4a02cfaf53ba427d7cf677f70932 +Merge: 48e3209 e93e9d0 +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Mon Dec 17 14:24:59 2012 +1000 + + Merge branch 'barriers' + +commit e93e9d004c11a59cab56139c0c04ea2b5c6a926b +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Mon Dec 17 14:18:07 2012 +1000 + + specs: removing a device results in a BarrierLeave event + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit bc009eb4dadf2138212291da05b514854923ae85 +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Fri Dec 7 14:41:03 2012 +1000 + + inputproto 2.2.99.1 + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 5f9d3b8584d88f49fa7533c429e32199a06ed215 +Author: Jasper St. Pierre <jstpierre@mecheye.net> +Date: Fri Dec 7 14:42:17 2012 +1000 + + Add support for pointer barrier events + + Signed-off-by: Jasper St. Pierre <jstpierre@mecheye.net> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 0b88ca65bdaab4c60f945fe64c48982bc89e5d1f +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Fri Dec 7 14:41:54 2012 +1000 + + Claim support for XI 2.3 + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 48e32091c5a3220a464caad49fd7dd013c429eda +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Fri Dec 7 12:55:24 2012 +1000 + + Fix typo in comment + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 377efaaa9828b4004741744ae172a193b5483a34 +Author: Daniel Martin <consume.noise@gmail.com> +Date: Wed Nov 7 12:41:49 2012 +0100 + + specs: XI2: Fix mods in XIPassive(Un)GrabDevice + + XIPassiveGrabDevice and XIPassiveUngrabDevice are using lists of + modifier masks. This one corrects these types. + + MODIFIERMASK was introduced, because a SETofMODIFIERMASK differs from a + SETofKEYMASK: AnyModifier=(1<<15) vs. GrabAnyModifier=(1U<<31). + + Signed-off-by: Daniel Martin <consume.noise@gmail.com> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit eb38fd9af846afe39287d5cf281b0274f42e8558 +Author: Daniel Martin <consume.noise@gmail.com> +Date: Wed Nov 7 12:41:48 2012 +0100 + + specs: XI2: Rename AxisClass to ValuatorClass + + ValuatorClass is the XI2 term for AxisClass. + + Signed-off-by: Daniel Martin <consume.noise@gmail.com> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit b30e7221b8888b674e6889beeada9b5b9dfc2f34 +Author: Daniel Martin <consume.noise@gmail.com> +Date: Wed Nov 7 12:41:47 2012 +0100 + + specs: XI2: Fix typos + + Signed-off-by: Daniel Martin <consume.noise@gmail.com> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 743cb2cf1567cf685dfe5444621eb56447768c7c +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Fri Nov 2 15:37:28 2012 +1000 + + XI2proto: spec formatting fix + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit a06905c8efc053e8ffcd0fc93736c0e45b715c38 +Author: Ran Benita <ran234@gmail.com> +Date: Sat Oct 27 14:56:49 2012 +0200 + + specs: XI2: add titles to requests/events and show them in TOC + + You often want to quickly jump to the specification of a specific + request/event, so add them to the table of contents to allow for that. + This also provides the reader with a quick glance at what the protocol + looks like. + + Signed-off-by: Ran Benita <ran234@gmail.com> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 74098071768a4b25670cf5582bc68433403deefe +Author: Ran Benita <ran234@gmail.com> +Date: Sat Oct 27 14:56:48 2012 +0200 + + specs: XI2: make event/request name formatting consistent + + None of the other have ':' there. + + Signed-off-by: Ran Benita <ran234@gmail.com> + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + +commit 3ed8aed32199edaa8621ccea571a04883e050cb5 +Author: Peter Hutterer <peter.hutterer@who-t.net> +Date: Thu Jun 14 08:56:55 2012 +1000 + + Fix two typos in spec/comments + + The ButtonClass provides the number of buttons, not the lentgh of the mask. + + Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> + commit e752e92dbdcf01b1cd46a3853f582ff765d19e90 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Fri Mar 2 12:58:18 2012 +1000 diff --git a/proto/inputproto/XI2.h b/proto/inputproto/XI2.h index e864b0635..b1498a755 100644 --- a/proto/inputproto/XI2.h +++ b/proto/inputproto/XI2.h @@ -30,7 +30,7 @@ See commit libXi-1.4.2-21-ge8531dd */ #define XI_2_Major 2 -#define XI_2_Minor 2 +#define XI_2_Minor 3 /* Property event flags */ #define XIPropertyDeleted 0 @@ -160,6 +160,11 @@ #define XITouchPendingEnd (1 << 16) #define XITouchEmulatingPointer (1 << 17) +/* Barrier event flags */ +#define XIBarrierPointerReleased (1 << 0) +#define XIBarrierDeviceIsGrabbed (1 << 1) + + /* Touch modes */ #define XIDirectTouch 1 #define XIDependentTouch 2 @@ -199,7 +204,9 @@ #define XI_RawTouchBegin 22 #define XI_RawTouchUpdate 23 #define XI_RawTouchEnd 24 -#define XI_LASTEVENT XI_RawTouchEnd +#define XI_BarrierHit 25 /* XI 2.3 */ +#define XI_BarrierLeave 26 +#define XI_LASTEVENT XI_BarrierLeave /* NOTE: XI2LASTEVENT in xserver/include/inputstr.h must be the same value * as XI_LASTEVENT if the server is supposed to handle masks etc. for this * type of event. */ @@ -232,5 +239,7 @@ #define XI_RawTouchBeginMask (1 << XI_RawTouchBegin) #define XI_RawTouchEndMask (1 << XI_RawTouchEnd) #define XI_RawTouchUpdateMask (1 << XI_RawTouchUpdate) +#define XI_BarrierHitMask (1 << XI_BarrierHit) +#define XI_BarrierLeaveMask (1 << XI_BarrierLeave) #endif /* _XI2_H_ */ diff --git a/proto/inputproto/XI2proto.h b/proto/inputproto/XI2proto.h index 733f923b7..4cdaa0dfb 100644 --- a/proto/inputproto/XI2proto.h +++ b/proto/inputproto/XI2proto.h @@ -67,6 +67,7 @@ #define Time uint32_t #define Atom uint32_t #define Cursor uint32_t +#define Barrier uint32_t /** * XI2 Request opcodes @@ -92,9 +93,10 @@ #define X_XIDeleteProperty 58 #define X_XIGetProperty 59 #define X_XIGetSelectedEvents 60 +#define X_XIBarrierReleasePointer 61 /** Number of XI requests */ -#define XI2REQUESTS (X_XIGetSelectedEvents - X_XIQueryPointer + 1) +#define XI2REQUESTS (X_XIBarrierReleasePointer - X_XIQueryPointer + 1) /** Number of XI2 events */ #define XI2EVENTS (XI_LASTEVENT + 1) @@ -154,7 +156,7 @@ typedef struct { uint16_t type; /**< Always ButtonClass */ uint16_t length; /**< Length in 4 byte units */ uint16_t sourceid; /**< source device for this class */ - uint16_t num_buttons; /**< Number of buttons provide */ + uint16_t num_buttons; /**< Number of buttons provided */ } xXIButtonInfo; /** @@ -815,6 +817,22 @@ typedef struct { } xXIGetPropertyReply; #define sz_xXIGetPropertyReply 32 +typedef struct { + uint16_t deviceid; + uint16_t pad; + Barrier barrier; + uint32_t eventid; +} xXIBarrierReleasePointerInfo; + +typedef struct { + uint8_t reqType; /**< Input extension major opcode */ + uint8_t ReqType; /**< Always X_XIBarrierReleasePointer */ + uint16_t length; + uint32_t num_barriers; + /* array of xXIBarrierReleasePointerInfo */ +} xXIBarrierReleasePointerReq; +#define sz_xXIBarrierReleasePointerReq 8 + /************************************************************************************* * * * EVENTS * @@ -1021,7 +1039,7 @@ typedef struct uint8_t type; /**< Always GenericEvent */ uint8_t extension; /**< XI extension offset */ uint16_t sequenceNumber; - uint32_t length; /**< Length in 4 byte uints */ + uint32_t length; /**< Length in 4 byte units */ uint16_t evtype; /**< ::XI_PropertyEvent */ uint16_t deviceid; Time time; @@ -1035,10 +1053,39 @@ typedef struct uint32_t pad3; } xXIPropertyEvent; +typedef struct +{ + uint8_t type; /**< Always GenericEvent */ + uint8_t extension; /**< XI extension offset */ + uint16_t sequenceNumber; + uint32_t length; /**< Length in 4 byte units */ + uint16_t evtype; /**< ::XI_BarrierHit or ::XI_BarrierLeave */ + uint16_t deviceid; + Time time; + uint32_t eventid; + Window root; + Window event; + Barrier barrier; +/* └──────── 32 byte boundary ────────┘ */ + uint32_t dtime; + uint32_t flags; /**< ::XIBarrierPointerReleased + ::XIBarrierDeviceIsGrabbed */ + uint16_t sourceid; + int16_t pad; + FP1616 root_x; + FP1616 root_y; + FP3232 dx; + FP3232 dy; +} xXIBarrierEvent; + +typedef xXIBarrierEvent xXIBarrierHitEvent; +typedef xXIBarrierEvent xXIBarrierPointerReleasedEvent; +typedef xXIBarrierEvent xXIBarrierLeaveEvent; #undef Window #undef Time #undef Atom #undef Cursor +#undef Barrier #endif /* _XI2PROTO_H_ */ diff --git a/proto/inputproto/configure.ac b/proto/inputproto/configure.ac index 1c74810f5..e6f3db4be 100644 --- a/proto/inputproto/configure.ac +++ b/proto/inputproto/configure.ac @@ -1,7 +1,6 @@ AC_PREREQ([2.60]) -AC_INIT([InputProto], [2.2], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg]) +AC_INIT([InputProto], [2.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) -AM_MAINTAINER_MODE # Require xorg-macros: XORG_WITH_ASCIIDOC m4_ifndef([XORG_MACROS_VERSION], diff --git a/proto/inputproto/specs/XI2proto.txt b/proto/inputproto/specs/XI2proto.txt index fb3276854..d30fccae4 100644 --- a/proto/inputproto/specs/XI2proto.txt +++ b/proto/inputproto/specs/XI2proto.txt @@ -1,5 +1,6 @@ The X Input Extension 2.x ========================= +:toclevels: 3 :toc: :numbered: @@ -13,6 +14,7 @@ Authors: History ------- +- v2.3, December 2012: Pointer barrier events added - v2.2, March 2012: Multitouch support added - v2.1, December 2011: new raw event behaviour, smooth scrolling support added @@ -31,7 +33,7 @@ XI2 provides a number of enhancements over version 1.5, including: minimum length of 32 bytes. - explicit device hierarchy of master and slave devices. See Section <<hierarchy,The Master/Slave device hierarchy>>. -- use of multiple independent master devices (Multi-Poiner X or MPX). +- use of multiple independent master devices (Multi-Pointer X or MPX). - the ability for devices to change capabilities at runtime. - raw device events @@ -56,6 +58,10 @@ Changes in version 2.2 - Multitouch support added +Changes in version 2.3 +---------------------- + +- Pointer barrier events added // ❧❧❧❧❧❧❧❧❧❧❧ @@ -550,6 +556,54 @@ window set has been reached, the event is delivered: Emulated pointer events will have the PointerEmulated flag set. A touch event that emulates pointer events has the TouchEmulatingPointer flag set. + +[[barrier-events]] +Pointer barrier events +^^^^^^^^^^^^^^^^^^^^^^ +If a master pointer moves against a pointer barrier blocking movement in +that pointer's direction, the movement of the pointer is clamped to the x or +y coordinate of the barrier, whichever applies. For a description of pointer +barriers and barrier creation and destruction see the XFixes protocol +specification v 5.0 or later. +http://cgit.freedesktop.org/xorg/proto/fixesproto/plain/fixesproto.txt + +A pointer hitting a blocking barrier creates a new barrier event sequence, +identified by a unique event ID. A new event ID is assigned when the pointer +first hits a barrier. Subsequent movements against or along the pointer +barrier are assigned the same event ID. The event generated by the pointer +leaving the barrier, or being released by a client request, is the last +event with this event ID. Any future movements of this device blocked by +this barrier will be assigned a new event ID. + +Pointer barrier events are delivered exclusively to the client that created +the barrier, and to the window specified in the CreatePointerBarrier +request (the "barrier window"). A pointer barrier blocks pointer movement +regardless of whether its window is mapped and/or viewable. If the pointer +barrier window is destroyed, the pointer barrier remains blocking but a +client will not receive further events. + +If a device is actively grabbed by a client or a passive grab activated +for this client, and the pointer moves against a pointer barrier created by +this client and the grab-window is the barrier window, that client will +receive pointer barrier events if: +- owner-events is true or false and the grab's event mask includes + pointer barrier events, or +- owner-events is true and the client has selected for barrier events on the + barrier window. + +If the grab-window is not the barrier window, the client will receive events +if: +- the client has selected for barrier events on the barrier window. + +If the barrier is not owned by this client, no barrier events are sent to +this client. The client owning the barrier will receive events if: +- the client has pointer barrier events selected on the window associated + with the pointer barrier + +The BarrierDeviceIsGrabbed flag is set whenever a pointer barrier event is +generated while the device is actively grabbed by any client or a passive +grab has activated for this device prior to the event. + [[glossary-notations]] Notations used in this document ------------------------------- @@ -615,7 +669,7 @@ Data types FP1616 Fixed point decimal in 16.16 format as one INT16 and one CARD16. - The INT16 contains the integral part, the CARD32 the decimal fraction + The INT16 contains the integral part, the CARD16 the decimal fraction shifted by 16. FP3232 @@ -623,6 +677,11 @@ Data types The INT32 contains the integral part, the CARD32 the decimal fraction shifted by 32. + MODIFIERMASK + A MODIFIERMASK is a binary mask defined as (1 << modifier map index). + A SETofMODIFIERMASK is a binary OR of zero or more MODIFIERMASK or + GrabAnyModifier. + VALUATORMASK A binary mask defined as (1 << valuator number). A SETofVALUATORMASK is a binary OR of zero or more VALUATORMASK. @@ -639,8 +698,8 @@ Errors are sent using core X error reports. [[requests]] -Requests: ---------- +Requests +-------- The server does not guarantee that the length of a reply remains constant in future revisions of XI2. A client must always retrieve the exact length of the @@ -655,6 +714,8 @@ Requests introduced in version 2.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [[requests-queryversion]] +XIQueryVersion +^^^^^^^^^^^^^^ ┌─── XIQueryVersion major_version: CARD16 @@ -679,6 +740,8 @@ server supports a version which is compatible with its expectations. If major_version is less than 2, a BadValue error occurs. [[requests-querydevice]] +XIQueryDevice +^^^^^^^^^^^^^ ┌─── XIQueryDevice DEVICE deviceid @@ -696,39 +759,39 @@ If major_version is less than 2, a BadValue error occurs. name: LISTofCHAR8 classes: LISTofCLASS } - CLASS { BUTTONCLASS, KEYCLASS, AXISCLASS, SCROLLCLASS, TOUCHCLASS } - - BUTTONCLASS { type: ButtonClass - length: CARD16 - sourceid: CARD16 - buttons_len: CARD16 - state: SETofBUTTONMASK - labels: LISTofATOM } - - KEYCLASS { type: KeyClass - length: CARD16 - sourceid: CARD16 - num_keys: CARD16 - keys: LISTofCARD32 } - - AXISCLASS { type: AxisClass - length: CARD16 - sourceid: CARD16 - axisnumber: CARD16 - label: ATOM - min: FP3232 - max: FP3232 - value: FP3232 - resolution: CARD32 - mode: CARD8 } - - SCROLLCLASS¹ {type: ScrollClass - length: CARD16 - sourceid: CARD16 - axisnumber: CARD16 - scroll_type: SCROLLTYPE - flags: SETofSCROLLFLAGS - increment: FP3232 } + CLASS { BUTTONCLASS, KEYCLASS, VALUATORCLASS, SCROLLCLASS, TOUCHCLASS } + + BUTTONCLASS { type: ButtonClass + length: CARD16 + sourceid: CARD16 + num_buttons: CARD16 + state: SETofBUTTONMASK + labels: LISTofATOM } + + KEYCLASS { type: KeyClass + length: CARD16 + sourceid: CARD16 + num_keys: CARD16 + keys: LISTofCARD32 } + + VALUATORCLASS { type: ValuatorClass + length: CARD16 + sourceid: CARD16 + number: CARD16 + label: ATOM + min: FP3232 + max: FP3232 + value: FP3232 + resolution: CARD32 + mode: CARD8 } + + SCROLLCLASS¹ { type: ScrollClass + length: CARD16 + sourceid: CARD16 + number: CARD16 + scroll_type: SCROLLTYPE + flags: SETofSCROLLFLAGS + increment: FP3232 } SCROLLTYPE { Vertical, Horizontal } @@ -820,15 +883,15 @@ The following classes may occur only once: ButtonClass, KeyClass keys List of keycodes provided. - AxisClass: + ValuatorClass: type - Always AxisClass. + Always ValuatorClass. length Length in 4 byte units. sourceid The device this class originates from. - axisnumber - Axis number of this axis. The axis number is in device-native + number + Valuator number of this axis. The valuator number is in device-native order and potential axis mappings are ignored. label Atom specifying the axis name. An Atom of None specifies an unlabeled @@ -850,8 +913,8 @@ client. If no min and max information is available, both must be 0. ScrollClass: type Always ScrollClass. - axisnumber - Axis number that is referred to. This axis number must be listed in + number + Valuator number that is referred to. This valuator number must be listed in the ValuatorClassInfo. scroll_type: Vertical for a vertical scrolling axis, Horizontal for a horizontal @@ -866,7 +929,7 @@ client. If no min and max information is available, both must be 0. The valuator delta equivalent to one positive unit of scrolling. A ScrollClass may only exist if the device has at least one ValuatorClass -and each axisnumber listed in any ScrollClass. Only one ScrollClass may +and each valuator number listed in any ScrollClass. Only one ScrollClass may exist per ValuatorClass. TouchClass: @@ -887,6 +950,8 @@ Devices with a TouchClass emit touch events with the same axes as pointer events. [[requests-selectevents]] +XISelectEvents +^^^^^^^^^^^^^^ ┌─── XISelectEvents window: Window @@ -938,6 +1003,8 @@ specific device when another client has a selection for XIAllDevices), a BadAccess error occurs. [[requests-getselectedevents]] +XIGetSelectedEvents +^^^^^^^^^^^^^^^^^^^ ┌─── XIGetSelectedEvents window: Window @@ -962,6 +1029,8 @@ If num_masks is 0, no events have been selected by this client on the given window. [[requests-querypointer]] +XIQueryPointer +^^^^^^^^^^^^^^ ┌─── XIQueryPointer window: Window @@ -1007,6 +1076,8 @@ If the device is not a master pointer device or not a floating slave pointer, a BadDevice error results. [[requests-warppointer]] +XIWarpPointer +^^^^^^^^^^^^^ ┌─── XIWarpPointer src_win: Window @@ -1053,6 +1124,8 @@ This request will generate events just as if the user had instantaneously moved the pointer. [[requests-changecursor]] +XIChangeCursor +^^^^^^^^^^^^^^ ┌─── XIChangeCursor win: Window @@ -1085,6 +1158,8 @@ If deviceid does not specify a master pointer, a BadDevice error is returned. [[requests-changehierarchy]] +XIChangeHierarchy +^^^^^^^^^^^^^^^^^ ┌─── XIChangeHierarchy num_changes: CARD8 @@ -1193,6 +1268,8 @@ selection will be canceled. Deviceid of the slave device. [[requests-setclientpointer]] +XISetClientPointer +^^^^^^^^^^^^^^^^^^ ┌─── XISetClientPointer win: Window @@ -1225,6 +1302,8 @@ If window does not specify a valid window or client ID and is not None, a BadWindow error is returned. [[requests-getclientpointer]] +XIGetClientPointer +^^^^^^^^^^^^^^^^^^ ┌─── XIGetClientPointer win: Window @@ -1247,6 +1326,8 @@ XISetClientPointer and a ClientPointer implicitly assigned by the server in response to an ambiguous request. [[requests-setfocus]] +XISetFocus +^^^^^^^^^^ ┌─── XISetFocus focus: Window @@ -1278,6 +1359,8 @@ current last-focus-change time or is later than the current X server time. Otherwise, the last-focus-change time is set to the specified time. [[requests-getfocus]] +XIGetFocus +^^^^^^^^^^ ┌─── XIGetFocus deviceid: DEVICEID @@ -1288,6 +1371,8 @@ Otherwise, the last-focus-change time is set to the specified time. Return the current focus window for the given device. [[requests-grabdevice]] +XIGrabDevice +^^^^^^^^^^^^ ┌─── XIGrabDevice deviceid: DEVICEID @@ -1379,6 +1464,8 @@ This request fails and returns: To release a grab of a device, use XIUngrabDevice. [[requests-ungrabdevice]] +XIUngrabDevice +^^^^^^^^^^^^^^ ┌─── XIUngrabDevice deviceid: DEVICEID @@ -1402,8 +1489,10 @@ An XIUngrabDevice is performed automatically if the event window for an active device grab becomes not viewable. [[requests-allowevents]] +XIAllowEvents +^^^^^^^^^^^^^ ┌─── - XIAllowEvents: + XIAllowEvents deviceid: DEVICEID time: TIMESTAMP or CurrentTime event_mode: { AsyncDevice, SyncDevice, @@ -1525,6 +1614,8 @@ you pass to the event-mode argument: sequence, ownership will be passed on to the next listener. [[requests-passivegrabdevice]] +XIPassiveGrabDevice +^^^^^^^^^^^^^^^^^^^ ┌─── XIPassiveGrabDevice deviceid: DEVICE @@ -1538,17 +1629,17 @@ you pass to the event-mode argument: num_modifiers: INT16 mask_len: CARD16 masks: SETofEVENTMASK - modifiers: CARD32 or GrabAnyModifier + modifiers: LISTofSETofMODIFIERMASK ▶ num_modifiers_return: INT16 - modifiers_return: GRABMODIFIERINFO + modifiers_return: LISTofGRABMODIFIERINFO └─── GRABTYPE { GrabtypeButton, GrabtypeKeycode, GrabtypeEnter, GrabtypeFocusIn, GrabtypeTouchBegin¹ } GRABMODIFIERINFO { status: Access - modifiers: CARD32 } + modifiers: SETofMODIFIERMASK } ¹ since XI 2.2 @@ -1713,6 +1804,8 @@ events continues even if the device is frozen due to a grab by another client. [[requests-passiveungrabdevice]] +XIPassiveUngrabDevice +^^^^^^^^^^^^^^^^^^^^^ ┌─── XIPassiveUngrabDevice deviceid: DEVICEID @@ -1720,7 +1813,7 @@ client. grab_type: GRABTYPE grab_window: Window num_modifiers: INT16 - modifiers: MODIFIERINFO + modifiers: LISTofSETofMODIFIERMASK └─── Release an explicit passive grab on the specified input device. @@ -1745,6 +1838,8 @@ of the same type, same button or keycode (if applicable) and modifier combination on the grab_window. [[requests-listproperties]] +XIListProperties +^^^^^^^^^^^^^^^^ ┌─── XIListProperties deviceid: DEVICEID @@ -1757,12 +1852,14 @@ List the properties associated with the given device. deviceid The device to list the properties for. - num_atoms - Number of atoms in the reply - atoms + num_properties + Number of properties in the reply + properties All properties on the device. [[requests-changeproperty]] +XIChangeProperty +^^^^^^^^^^^^^^^^ ┌─── XIChangeProperty deviceid: DEVICEID @@ -1811,6 +1908,8 @@ property, use XIDeleteProperty. This request generates an XIPropertyEvent. [[requests-deleteproperty]] +XIDeleteProperty +^^^^^^^^^^^^^^^^ ┌─── XIDeleteProperty deviceid: DEVICEID @@ -1828,6 +1927,8 @@ If the property is deleted, an XIPropertyEvent is generated on the device. If the property does not exist, this request does nothing. [[requests-getproperty]] +XIGetProperty +^^^^^^^^^^^^^ ┌─── XIGetProperty deviceid: DEVICEID @@ -1892,6 +1993,48 @@ giving the number of trailing unread bytes in the stored property. If delete is True and the bytes_after is zero, the property is also deleted from the device, and a XIPropertyNotify event is generated on the device. + +[[requests-xi23]] +Requests introduced in version 2.3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +[[requests-barrierreleasepointer]] +XIBarrierReleasePointer +^^^^^^^^^^^^^^^^^^^^^^^ + ┌─── + XIBarrierReleasePointer + num_items: CARD32 + ▶ + data: LISTofBARRIERRELEASEINFO + └─── + + BARRIERRELEASEINFO { deviceid: DEVICEID, + barrier: Barrier, + eventid: CARD32 } + +Release a pointer currently blocked by a barrier. In the future, movement of +this pointer against the barrier will not be blocked. + + deviceid + The device currently being blocked by a barrier + barrier + The barrier currently blocking the device + eventid + The unique event ID assigned to this barrier event sequence + +If the barrier given does not currently block this device, or the eventid +is invalid, this request does nothing. + +Releasing a pointer barrier is only valid during one barrier event sequence, +and only applies to the next movement of this device against this barrier. +If the pointer moves away from the barrier following a +XIBarrierReleasePointer request, the release request is discarded. In the +future, if the pointer moves against the barrier again, a new eventid is +assigned and the client must re-issue the XIBarrierReleasePointer request. + +If the device is not a master pointer device, a BadDevice error results. +If the barrier does not name a valid barrier, a BadValue error results. + [[events]] Events @@ -1936,6 +2079,11 @@ Version 2.2: - RawTouchUpdate - RawTouchEnd +Version 2.3: + + - BarrierHit + - BarrierLeave + All events have a set of common fields specified as EVENTHEADER. @@ -1968,8 +2116,10 @@ Events introduced in version 2.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [[events-hierarchyevent]] +HierarchyEvent +^^^^^^^^^^^^^^ ┌─── - HierarchyEvent: + HierarchyEvent EVENTHEADER flags: SETofHIERARCHYMASK num_info: CARD16 @@ -2016,8 +2166,10 @@ deviceid in an XIHierarchyEvent is always the first affected device. Clients should ignore deviceid and instead use the devices list. [[events-devicechangedevent]] +DeviceChangedEvent +^^^^^^^^^^^^^^^^^^ ┌─── - DeviceChangedEvent: + DeviceChangedEvent EVENTHEADER reason: CHANGEREASON source: DEVICEID @@ -2050,8 +2202,10 @@ master device, or by a physical device changing capabilities at runtime. For a detailed description of classes, see the XIQueryDevice request. [[events-deviceevent]] +DeviceEvent +^^^^^^^^^^^ ┌─── - DeviceEvent: + DeviceEvent EVENTHEADER detail: CARD32 root: Window @@ -2160,7 +2314,8 @@ Modifier state in mods is detailed as follows: locked_mods XKB locked modifier state. - Group state in group is detailed as follows: +Group state in group is detailed as follows: + base_group XKB base group state. latched_group @@ -2193,6 +2348,8 @@ physical buttons only, even if that sequence is emulating pointer events. Touch events do not generate enter/leave events. [[events-rawevent]] +RawEvent +^^^^^^^^ ┌─── RawEvent EVENTHEADER @@ -2242,6 +2399,8 @@ when the device is grabbed by another client. ¹ since XI 2.2 [[events-enterleave]] +Enter or Leave or FocusIn or FocusOut +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ┌─── Enter or Leave or FocusIn or FocusOut EVENTHEADER @@ -2323,6 +2482,8 @@ zero if the device is a floating slave device. Button state before the event. [[events-propertyevent]] +XIPropertyEvent +^^^^^^^^^^^^^^^ ┌─── XIPropertyEvent EVENTHEADER @@ -2343,6 +2504,8 @@ Events introduced in version 2.2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [[events-touchownershipevent]] +TouchOwnershipEvent +^^^^^^^^^^^^^^^^^^^ ┌─── TouchOwnershipEvent EVENTHEADER @@ -2371,6 +2534,95 @@ is now the owner of the touch sequence specified by touchid. flags A bitmask of flags for this event. +[[events-xi23]] +Events introduced in version 2.3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +[[events-barrierevent]] +BarrierEvent +^^^^^^^^^^^^ + ┌─── + BarrierEvent + EVENTHEADER + eventid: CARD32 + root: Window + event: Window + barrier: Barrier + dtime: CARD32 + flags: SETofBARRIERFLAGS + sourceid: DEVICEID + root_x: FP1616 + root_y: FP1616 + dx: FP3232 + dy: FP3232 + └─── + + BARRIERFLAGS { PointerReleased, DeviceIsGrabbed } + +A BarrierEvent indicates interaction between a barrier and a pointer device. +If the event type is BarrierHit, pointer movement has been blocked by a +barrier. If the event type is BarrierLeave, a pointer previously blocked +by a barrier has moved away from that barrier, or has moved +through the blocking barrier following an earlier XIBarrierReleasePointer +request. + + eventid + The unique event ID for this barrier event sequence. + root + event + The root window or barrier window, respectively. The barrier window + is always the drawable specified in in the CreatePointerBarrier request. + barrier + The barrier blocking pointer movement. + dtime + The relative time in milliseconds between the last event and this + event. + flags + A set of flags that apply to this barrier event + PointerReleased: + The pointer has moved through the barrier following a + XIBarrierReleasePointer request (BarrierLeave only). + DeviceIsGrabbed: + The pointer device that generated this event is currently + grabbed. + sourceid + The source device that originally generated the event. + root_x + root_y + The position of the pointer in screen coordinates (16.16 fixed + point), after being constrained by barrier and/or screen extents. + dx + dy + The relative movement of the pointer from its previous position to + the new position if pointer movement were not constrained by this + barrier. + +Root coordinates in barrier events represent the position of the cursor +after confinement by barriers, screens and RandR output extents. + +Barrier event IDs are provided in the eventid field of barrier events. Its +value is always provided in every barrier event. Event IDs are +represented as unsigned 32-bit values and increase strictly monotonically in +value for each new barrier event sequence, wrapping back to 0 upon reaching +the numerical limit of IDs. The increment between two event IDs is +indeterminate. Clients may not assume that any future barrier constraints +will have specific event IDs. IDs are unique per device per barrier. + +If a pointer is actively grabbed after a barrier event sequence has +initiated, future barrier events of this sequence continue to use the same +eventid, but all barrier events have the DeviceIsGrabbed flag set. If the +pointer is ungrabbed, future events of this sequence have the same eventid +and the DeviceIsGrabbed flag is unset. + +The PointerReleased flag may only be set on a BarrierLeave event. +A BarrierLeave(PointerReleased) event is generated when the pointer moves +through the barrier following a XIBarrierReleasePointer request. The time +between the XIBarrierReleasePointer and the BarrierLeave event thus depends +on user input. +A BarrierLeave(PointerReleased) event is also generated if the barrier is +destroyed while pointer movement is constrained by the barrier, or the +master pointer blocked by the barrier is removed. This event +has a dx/dy of 0/0. :numbered!: [[xi22-usecases]] |