[PATCH] Fixes v5: Pointer barriers

Adam Jackson ajax at redhat.com
Wed Dec 8 14:35:06 PST 2010


v2: Review fixes:
- Take any drawable to name the screen, don't require a window
- Pointer barriers, not Cursor barriers
- Elaborate on the interaction with XI2 and with absolute devices
- Elaborate on the coordinate rules

Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 COPYING        |    1 +
 fixesproto.txt |   92 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 xfixesproto.h  |   32 +++++++++++++++++++
 xfixeswire.h   |   18 +++++++++--
 4 files changed, 136 insertions(+), 7 deletions(-)

diff --git a/COPYING b/COPYING
index cdcb1ad..c8114fe 100644
--- a/COPYING
+++ b/COPYING
@@ -1,4 +1,5 @@
 Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+Copyright 2010 Red Hat, Inc.
 
 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
diff --git a/fixesproto.txt b/fixesproto.txt
index 5ef8153..e060e93 100644
--- a/fixesproto.txt
+++ b/fixesproto.txt
@@ -1,7 +1,7 @@
                         The XFIXES Extension
-			    Version 4.0
-			 Document Revision 2
-			     2006-12-14
+			    Version 5.0
+			 Document Revision 1
+			     2010-11-15
 			    Keith Packard
 			  keithp at keithp.com
 
@@ -19,7 +19,7 @@ developers, in particular,
 
  +	Owen Taylor for describing the issues raised with the XEMBED
  	mechanisms and SaveSet processing and his initial extension
-	to handle this issue.
+	to handle this issue, and for pointer barriers
 
  +	Bill Haneman for the design for cursor image tracking.
 
@@ -566,6 +566,90 @@ ShowCursor
 	Servers supporting the X Input Extension Version 2.0 or higher show
 	all visible cursors in response to a ShowCursor request.
 
+************* XFIXES VERSION 5 OR BETTER ***********
+
+12. Pointer Barriers
+
+Compositing managers and desktop environments may have UI elements in
+particular screen locations such that for a single-headed display they
+correspond to easy targets according to Fitt's Law, for example, the top
+left corner.  For a multi-headed environment these corners should still be
+semi-impermeable.  Pointer barriers allow the application to define
+additional constraint on cursor motion so that these areas behave as
+expected even in the face of multiple displays.
+
+Absolute positioning devices like touchscreens do not obey pointer barriers.
+There's no advantage to target acquisition to do so, since on a touchscreen
+all points are in some sense equally large, whereas for a relative
+positioning device the edges and corners are infinitely large.
+
+WarpPointer and similar requests do not obey pointer barriers, for
+essentially the same reason.
+
+12.1 Types
+
+	BARRIER:	XID
+
+	BarrierDirections
+
+		BarrierPositiveX:	    1 << 0
+		BarrierPositiveY:	    1 << 1
+		BarrierNegativeX:	    1 << 2
+		BarrierNegativeY:	    1 << 3
+
+12.2 Errors
+
+	Barrier
+
+12.3 Requests
+
+CreatePointerBarrier
+
+		barrier:		    BARRIER
+		drawable:		    DRAWABLE
+		x1, y2, x2, y2:		    CARD16
+		directions:		    CARD32
+		devices:		    LISTofDEVICEID
+
+	Creates a pointer barrier along the line specified by the given
+	coordinates on the screen associated with the given drawable.  The
+	barrier has no spatial extent; it is simply a line along the left
+	or top edge of the specified pixels.  Barrier coordinates are in
+	screen space.
+
+	The coordinates must be axis aligned, either x1 == x2, or
+	y1 == y2, but not both.  The varying coordinates may be specified
+	in any order.  For x1 == x2, either y1 > y2 or y1 < y2 is valid.
+	If the coordinates are not valid BadValue is generated.
+
+	Motion is allowed through the barrier in the directions specified:
+	setting the BarrierPositiveX bit allows travel through the barrier
+	in the positive X direction, etc.  Nonsensical values (forbidding Y
+	axis travel through a vertical barrier, for example) and excess set
+	bits are ignored.
+
+	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
+	barrier applies to all master devices.  If a slave device is named,
+	BadMatch is generated; this does not apply to slave devices named
+	implicitly by XIAllDevices.  Naming a device multiple times is
+	legal, and is treated as though it were named only once.  If a
+	device is removed, the barrier continues to apply to the remaining
+	devices, but will not apply to any future device with the same ID
+	as the removed device.  Nothing special happens when all matching
+	devices are removed; barriers must be explicitly destroyed.
+
+	Errors: IDChoice, Window, Value, Match
+
+DestroyPointerBarrier
+
+		barrier:		    BARRIER
+
+	Destroys the named barrier.
+
+	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 ed872d1..22e963d 100644
--- a/xfixesproto.h
+++ b/xfixesproto.h
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2010 Red Hat, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -500,6 +501,37 @@ typedef struct {
 
 #define sz_xXFixesShowCursorReq	sizeof(xXFixesShowCursorReq)
 
+/*************** Version 5.0 ******************/
+
+#define Barrier CARD32
+
+typedef struct {
+    CARD8   reqType;
+    CARD8   xfixesReqType;
+    CARD16  length B16;
+    Barrier barrier B32;
+    Window  window B32;
+    CARD16  x1 B16;
+    CARD16  y1 B16;
+    CARD16  x2 B16;
+    CARD16  y2 B16;
+    CARD32  directions;
+    CARD32  num_devices;
+    /* array of CARD16 devices */
+} xXFixesCreatePointerBarrierReq;
+
+#define sz_xXFixesCreatePointerBarrierReq 28
+
+typedef struct {
+    CARD8   reqType;
+    CARD8   xfixesReqType;
+    CARD16  length B16;
+    Barrier barrier B32;
+} xXFixesDestroyPointerBarrierReq;
+
+#define sz_xXFixesDestroyPointerBarrierReq 8
+
+#undef Barrier
 #undef Region
 #undef Picture
 #undef Window
diff --git a/xfixeswire.h b/xfixeswire.h
index 7b43f09..432349a 100644
--- a/xfixeswire.h
+++ b/xfixeswire.h
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2010 Red Hat, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -47,7 +48,7 @@
 #define _XFIXESWIRE_H_
 
 #define XFIXES_NAME	"XFIXES"
-#define XFIXES_MAJOR	4
+#define XFIXES_MAJOR	5
 #define XFIXES_MINOR	0
 
 /*************** Version 1 ******************/
@@ -85,8 +86,11 @@
 /*************** Version 4 ******************/
 #define X_XFixesHideCursor		    29
 #define X_XFixesShowCursor		    30
+/*************** Version 5 ******************/
+#define X_XFixesCreatePointerBarrier	    31
+#define X_XFixesDestroyPointerBarrier	    32
 
-#define XFixesNumberRequests		    (X_XFixesShowCursor+1)
+#define XFixesNumberRequests		    (X_XFixesDestroyPointerBarrier+1)
 
 /* Selection events share one event number */
 #define XFixesSelectionNotify		    0
@@ -111,7 +115,8 @@
 
 /* errors */
 #define BadRegion			    0
-#define XFixesNumberErrors		    (BadRegion+1)
+#define BadBarrier			    1
+#define XFixesNumberErrors		    (BadBarrier+1)
 
 #define SaveSetNearest			    0
 #define SaveSetRoot			    1
@@ -124,4 +129,11 @@
 #define WindowRegionBounding		    0
 #define WindowRegionClip		    1
 
+/*************** Version 5 ******************/
+
+#define BarrierPositiveX		    (1L << 0)
+#define BarrierPositiveY		    (1L << 1)
+#define BarrierNegativeX		    (1L << 2)
+#define BarrierNegativeY		    (1L << 3)
+
 #endif	/* _XFIXESWIRE_H_ */
-- 
1.7.3.2



More information about the xorg-devel mailing list