On Thu, 2012-05-03 at 11:12 +1000, Peter Hutterer wrote: > On Tue, Apr 03, 2012 at 01:42:38PM +1000, Christopher James Halse Rogers > wrote: > > --- > > > > 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. > > are events triggered on barriers without velocity?
Yes. I could make this more obvious by explicitly stating that barriers without velocity will never send ThresholdExceeded. > > > + > > +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. > > Does this request trigger a BarrierNotify event? If so, we need a new type > for that event. In my head and Ubuntu it doesn't trigger a BarrierNotify event, but perhaps it should. I'll add an extra PointerReleased event type. > > can this be called for barriers without defined velocity? Yes. Perhaps I should make it explicit in the preamble that everything applies to barriers both with and without a velocity threshold. > > Cheers, > Peter > > > + > > + 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
signature.asc
Description: This is a digitally signed message part
_______________________________________________ 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