[PATCH] fixesproto v6: Pointer barrier thresholds
Christopher James Halse Rogers
christopher.halse.rogers at canonical.com
Mon Apr 2 20:42:38 PDT 2012
---
I've got a corresponding xserver patch, but it needs updating for the
Great Reindent of '12. Might as well get support for the protocol additions
before fixing it up.
A slightly different variant of this (it's gone through a number of iterations
in conjunction with the Unity team) is used by the Unity shell as infrastructure
for the one-launcher-per-display support, so there's evidence that it's a usable
protocol.
configure.ac | 2 +-
fixesproto.txt | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
xfixesproto.h | 59 +++++++++++++++++++++++++++++++++++
xfixeswire.h | 23 +++++++++++--
4 files changed, 173 insertions(+), 5 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..6f8c705 100644
--- a/fixesproto.txt
+++ b/fixesproto.txt
@@ -650,6 +650,100 @@ 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}
+ BarrierEventID: CARD32
+
+13.2 Events
+
+BarrierNotify
+
+ subtype: BarrierEvent
+ window: WINDOW
+ event-id: BarrierEventID
+ barrier: BARRIER
+ velocity: CARD32
+ x, y: INT16
+ raw-displacement: FP1616
+ delta-t: INT16
+ deviceid: INT16
+
+13.3 Requests
+
+SelectBarrierInput
+
+ window: WINDOW
+ event-mask: SETofBarrierEvent
+
+
+ This request directs barrier events to the named window. Subtype
+ indicates the trigger of the event, which is Hit when the barrier has
+ prevented pointer movement and ThresholdExceeded when the barrier has
+ been hit but has not prevented pointer movement due to the threshold
+ being exceeded.
+
+ Barrier is the barrier on which the event was triggered. (x,y) contain
+ the coordinates of the pointer after restriction by any applicable
+ barriers, and velocity is the unrestricted instantaneous velocity
+ of the pointer, perpendicular to the barrier.
+
+ deviceid is the identifier of the device which caused the barrier
+ event, raw-displacement and delta-t are the raw valuator (purpendicular
+ to the barrier) and time-since-last-input-event for deviceid
+ respectively.
+
+ event-id is an identifier for this barrier event. A barrier event
+ begins when the pointer is first restricted by the barrier, and ends
+ with the first mouse event that is not restricted by the barrier.
+
+ In the case of multiple overlapping barriers an event is sent for each.
+
+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 block the pointer if the threshold
+ velocity is exceeded. The velocity is measured in px/sec perpendicular
+ to the barrier.
+
+ Once the pointer has been stopped by the barrier it will remain blocked
+ for the duration of the barrier event.
+
+ Errors: IDChoice, Window, Value, Device
+
+BarrierReleasePointer
+
+ barrier: BARRIER
+ event-id: BarrierEventID
+
+ Temporarily allow the pointer to pass through a pointer barrier.
+ This disables the barrier for as long as event-id is valid - that is,
+ as long as the pointer remains in contact with the barrier.
+
+ Requests to release the pointer for an event-id which is not current
+ are silently ignored.
+
+ 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..4e2d3d6 100644
--- a/xfixesproto.h
+++ b/xfixesproto.h
@@ -532,6 +532,65 @@ typedef struct {
#define sz_xXFixesDestroyPointerBarrierReq 8
+/*************** Version 6.0 ******************/
+
+#define BarrierEventID CARD32
+
+typedef struct {
+ CARD8 type;
+ CARD8 subtype;
+ CARD16 sequenceNumber B16;
+ Window window; B32;
+ BarrierEventID event_id B32;
+ Barrier barrier;
+ CARD32 velocity B32;
+ INT16 x B16;
+ INT16 y B16;
+ CARD32 raw_displacement B32;
+ CARD16 delta_t B16;
+ CARD16 deviceid B16;
+} 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;
+ Window window B32;
+ CARD32 eventMask B32;
+} xXFixesSelectBarrierInputReq;
+
+#define sz_xXFixesSelectBarrierInputReq 12
+
+typedef struct {
+ CARD8 reqType;
+ CARD8 xfixesReqType;
+ CARD16 length B16;
+ Barrier barrier B32;
+ BarrierEventID event_id B32;
+} xXFixesBarrierReleasePointerReq;
+
+#define sz_xXFixesBarrierReleasePointerReq 12
+
+#undef BarrierEventID
#undef Barrier
#undef Region
#undef Picture
diff --git a/xfixeswire.h b/xfixeswire.h
index 432349a..0230595 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
@@ -111,8 +115,6 @@
#define XFixesDisplayCursorNotifyMask (1L << 0)
-#define XFixesNumberEvents (2)
-
/* errors */
#define BadRegion 0
#define BadBarrier 1
@@ -136,4 +138,17 @@
#define BarrierNegativeX (1L << 2)
#define BarrierNegativeY (1L << 3)
+/*************** Version 6 ******************/
+
+#define XFixesBarrierNotify 2
+
+#define XFixesBarrierHitNotify 0
+#define XFixesBarrierThresholdExceededNotify 1
+
+#define XFixesBarrierHitNotifyMask (1L << 0)
+#define XFixesBarrierThresholdExceededNotifyMask (1L << 1)
+
+#define XFixesNumberEvents (XFixesBarrierNotify+1)
+
+
#endif /* _XFIXESWIRE_H_ */
--
1.7.9.1
More information about the xorg-devel
mailing list