---

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

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to