[PATCH fixesproto] fixesproto v6: Pointer barrier thresholds
Christopher James Halse Rogers
christopher.halse.rogers at canonical.com
Sun Jul 29 22:12:34 PDT 2012
v2: Use a GenericEvent for BarrierNotify
Add PointerReleased event type
Clarify scope of barrier event-id
Release multiple barriers in a single ReleasePointer call.
v3: Fix trailing whitespace
Remove window parameter from SelectBarrierInput
Align structs to 4-byte boundaries
Clarify when PointerBarriers generate BarrierEvent events
Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers at canonical.com>
---
configure.ac | 2 +-
fixesproto.txt | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
xfixesproto.h | 76 ++++++++++++++++++++++++++++++
xfixeswire.h | 20 +++++++-
4 files changed, 238 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index f85b802..07dd29a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ([2.60])
-AC_INIT([FixesProto], [5.0],
+AC_INIT([FixesProto], [6.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
diff --git a/fixesproto.txt b/fixesproto.txt
index 5903ac9..8b9cd42 100644
--- a/fixesproto.txt
+++ b/fixesproto.txt
@@ -1,5 +1,5 @@
The XFIXES Extension
- Version 5.0
+ Version 6.0
Document Revision 1
2010-11-15
Keith Packard
@@ -628,6 +628,13 @@ CreatePointerBarrier
axis travel through a vertical barrier, for example) and excess set
bits are ignored.
+ A pointer hitting the barrier results in a BarrierNotify event. A
+ barrier that allows pointer motion due to the bits set in directions
+ is not considered to have been hit and will not generate a
+ BarrierNotify. For example, a barrier with BarrierPositiveX set
+ will not send a BarrierNotify when the pointer passes through it
+ in the positive X direction.
+
If the server supports the X Input Extension version 2 or higher,
the devices element names a set of master device to apply the
barrier to. If XIAllDevices or XIAllMasterDevices are given, the
@@ -650,6 +657,141 @@ DestroyPointerBarrier
Errors: Barrier
+************* XFIXES VERSION 6 OR BETTER ***********
+
+13. Pointer Barriers Expansion
+
+This update extends pointer barriers to optionally allow the pointer through
+when a threshold is reached. This can be useful for desktop environments that
+wish to use a large region of the screen, such as an entire edge, to provide a
+casual target while allowing determined movement to pass through.
+
+13.1 Types
+
+ BarrierEvent: {Hit, ThresholdExceeded, PointerReleased}
+ BarrierEventID: CARD32
+ BarrierEventDetails: { barrier: BARRIER,
+ type: BarrierEvent,
+ event-id: BarrierEventID }
+
+13.2 Events
+
+BarrierNotify
+
+ type: BYTE
+ extension: CARD8
+ sequenceNumber: CARD16
+ length: CARD32
+ evtype: CARD16
+ window: WINDOW
+ x, y: INT16
+ dx, dy: FP3232
+ raw-dx, raw-dy: FP3232
+ dt: INT16
+ deviceid: DEVICEID
+ num-details: CARD16
+ details: LISTofBarrierEventDetails
+
+ BarrierNotify uses the X Generic Event extension. Type is thus always
+ GenericEvent (35), extension is the major opcode of this extension,
+ sequenceNumber is the low 16 bits of the request sequence number,
+ length is how much bigger than 32 bytes the event is, in units of
+ 4 bytes. Evtype is the type of this event, which is always
+ BarrierNotify (0).
+
+ (x, y) contain the coordinates of the pointer after restriction by
+ any applicable barriers or server-side clamping (such as to screen
+ edges).
+
+ (dx, dy) and (raw-dx, raw-dy) are the valuators for the input event
+ which caused the BarrierNotify to be emitted, before any clamping
+ (such as to the screen edge, or by a barrier) is applied.
+ (dx, dy) are the values after acceleration, (raw-dx, raw-dy) are the
+ raw values before any acceleration is applied. dt is the server time
+ in milliseconds since the last input event, and deviceid is the id of
+ the input device which triggered the barrier.
+
+ Each item in the details list contains the information for a barrier
+ triggered by this input event. If there are multiple overlapping
+ barriers blocking pointer motion each one will be represented in
+ this list.
+
+ barrier is the ID of the barrier hit.
+
+ Type indicates the trigger of the event:
+ Hit when the barrier has prevented pointer movement.
+ ThresholdExceeded when the barrier has been hit but has not
+ prevented pointer movement due to the threshold being exceeded.
+ PointerReleased when the barrier would have blocked motion but
+ has been rendered permeable by a BarrierReleasePointer request.
+
+ event-id is an identifier for this barrier event. A barrier event
+ begins when the pointer is first restricted by the barrier and remains
+ valid until the first input event from deviceid which is not
+ restricted by the barrier. The event-id is unique per-barrier.
+
+ Since a barrier event is associated with a deviceid there can be more
+ than one event active for a given barrier simultaneously.
+
+
+13.3 Requests
+
+SelectBarrierInput
+
+ event-mask: SETofBarrierEvent
+
+ This request directs barrier events to the client which issued the
+ request.
+
+CreatePointerBarrierVelocity
+
+ barrier: BARRIER
+ drawable: DRAWABLE
+ x1, y2, x2, y2: INT16
+ directions: CARD32
+ velocity: CARD32
+ devices: LISTofDEVICEID
+
+ Creates a pointer barrier along the line specified by the given
+ coordinates on the screen associated with the given drawable. This
+ has identical semantics to CreatePointerBarrier, except that the
+ barrier created will not initially block the pointer if the threshold
+ velocity is exceeded. The velocity is measured in px/sec perpendicular
+ to the barrier.
+
+ A pointer hitting the barrier results in a BarrierNotify event in the
+ same way as a regular PointerBarrier. This event is sent whether or not
+ the threshold velocity was exceeded.
+
+ Once the pointer has been stopped by the barrier it will remain blocked
+ for the duration of the barrier event unless released by a
+ BarrierReleasePointer request.
+
+ Errors: IDChoice, Window, Value, Device
+
+BarrierReleasePointer
+
+ barriers: LISTof{ BARRIER,
+ BarrierEventID}
+
+ Temporarily allow the pointer to pass through a set of pointer
+ barriers. For each barrier in barriers this allows the pointer to pass
+ through for as long as the corresponding event-id is valid.
+
+ A single barrier may appear in barriers more than once with a
+ different associated event-id each time. In this way a client can
+ release a barrier for multiple input devices in one request.
+
+ If a requested event-id is not current for its associated barrier
+ then that, and only that, part of the request is silently ignored.
+
+ If the same (barrier, event-id) pair appears more than once in
+ barriers then the request behaves as if that pair appeared exactly
+ once.
+
+ Errors: Barrier
+
+
99. Future compatibility
This extension is not expected to remain fixed. Future changes will
diff --git a/xfixesproto.h b/xfixesproto.h
index fcf409a..2df8211 100644
--- a/xfixesproto.h
+++ b/xfixesproto.h
@@ -532,6 +532,82 @@ typedef struct {
#define sz_xXFixesDestroyPointerBarrierReq 8
+/*************** Version 6.0 ******************/
+
+#define BarrierEventID CARD32
+
+typedef struct
+{
+ Barrier barrier B32;
+ CARD32 type B32;
+ BarrierEventID event_id B32;
+} xXFixesBarrierEventDetails;
+
+typedef struct
+{
+ CARD8 type; /* Always GenericEvent */
+ CARD8 extension; /* XFIXES extension offset */
+ CARD16 sequenceNumber B16;
+ CARD32 length B32; /* Length in 4 byte units */
+ CARD16 evtype B16; /* Always BarrierNotify */
+ INT16 deviceid B16;
+ WINDOW window B32;
+ INT16 x B16;
+ INT16 y B16;
+ FP3232 dx;
+ FP3232 dy;
+ FP3232 raw-dx;
+ FP3232 raw-dy;
+ INT16 dt B16;
+ INT16 num_eventdetails B16;
+ /* Array of BarrierEventDetails */
+} xXFixesBarrierNotifyEvent;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xfixesReqType;
+ CARD16 length B16;
+ Barrier barrier B32;
+ Window window B32;
+ INT16 x1 B16;
+ INT16 y1 B16;
+ INT16 x2 B16;
+ INT16 y2 B16;
+ CARD32 directions;
+ CARD32 velocity;
+ CARD16 pad B16;
+ CARD16 num_devices B16;
+ /* array of CARD16 devices */
+} xXFixesCreatePointerBarrierVelocityReq;
+
+#define sz_xXFixesCreatePointerBarrierVelocityReq 32
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xfixesReqType;
+ CARD16 length B16;
+ CARD32 eventMask B32;
+} xXFixesSelectBarrierInputReq;
+
+#define sz_xXFixesSelectBarrierInputReq 8
+
+typedef struct {
+ Barrier barrier B32;
+ BarrierEventID event_id B32;
+} xXFixesBarrierReleaseDetails;
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xfixesReqType;
+ CARD16 length B16;
+ CARD16 num_barriers B16;
+ /* array of BarrierReleaseDetails
+ */
+} xXFixesBarrierReleasePointerReq;
+
+#define sz_xXFixesBarrierReleasePointerReq 6
+
+#undef BarrierEventID
#undef Barrier
#undef Region
#undef Picture
diff --git a/xfixeswire.h b/xfixeswire.h
index 432349a..e3a23c7 100644
--- a/xfixeswire.h
+++ b/xfixeswire.h
@@ -48,7 +48,7 @@
#define _XFIXESWIRE_H_
#define XFIXES_NAME "XFIXES"
-#define XFIXES_MAJOR 5
+#define XFIXES_MAJOR 6
#define XFIXES_MINOR 0
/*************** Version 1 ******************/
@@ -89,8 +89,12 @@
/*************** Version 5 ******************/
#define X_XFixesCreatePointerBarrier 31
#define X_XFixesDestroyPointerBarrier 32
+/*************** Version 6 ******************/
+#define X_XFixesCreatePointerBarrierVelocity 33
+#define X_XFixesSelectBarrierInput 34
+#define X_XFixesBarrierReleasePointer 35
-#define XFixesNumberRequests (X_XFixesDestroyPointerBarrier+1)
+#define XFixesNumberRequests (X_XFixesBarrierReleasePointer+1)
/* Selection events share one event number */
#define XFixesSelectionNotify 0
@@ -136,4 +140,16 @@
#define BarrierNegativeX (1L << 2)
#define BarrierNegativeY (1L << 3)
+/*************** Version 6 ******************/
+
+#define XFixesBarrierNotify 0
+
+#define XFixesBarrierHitNotify 0
+#define XFixesBarrierThresholdExceededNotify 1
+#define XFixesBarrierPointerReleasedNotify 2
+
+#define XFixesBarrierHitNotifyMask (1L << 0)
+#define XFixesBarrierThresholdExceededNotifyMask (1L << 1)
+#define XFixesBarrierPointerReleasedNotifyMask (1L << 2)
+
#endif /* _XFIXESWIRE_H_ */
--
1.7.10.4
More information about the xorg-devel
mailing list