[PATCH] Fixes v5: Cursor barriers

Adam Jackson ajax at redhat.com
Mon Nov 15 14:11:54 PST 2010


Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 COPYING        |    1 +
 fixesproto.txt |   73 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 xfixesproto.h  |   30 +++++++++++++++++++++++
 xfixeswire.h   |   18 +++++++++++--
 4 files changed, 115 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..6b1c2fc 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 cursor barriers
 
  +	Bill Haneman for the design for cursor image tracking.
 
@@ -566,6 +566,71 @@ 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. Cursor 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 multiheaded environment these corners should still be
+semi-impermeable.  Cursor barriers allow the application to define
+additional constraint on cursor motion so that these regions behave as
+expected even in the face of multiple displays.
+
+WarpPointer and similar requests do not obey these barriers.
+
+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
+
+CreateCursorBarrier
+
+		barrier:		    BARRIER
+		window:			    WINDOW
+		x1, y2, x2, y2:		    CARD16
+		directions:		    CARD32
+
+	Creates a cursor barrier along the line specified by the given
+	coordinates on the screen specified by the given Window.  The
+	barrier has no spatial extent; it is simply a line along the left
+	or top edge of the specified pixels.
+
+	The coordinates must be axis aligned, either x1 == x2, or
+	y1 == y2.  If not, BadValue is generated.
+
+	Motion is allowed through the barrier in the directions specified.
+	Nonsensical values (forbidding Y axis travel through a vertical
+	barrier, for example) and excess set bits are ignored.
+
+	Servers supporting the X Input Extension version 2.0 or higher
+	respect these barriers for any cursor on relative motion events.
+	Absolute positioning devices do not obey these barriers as there's
+	no benefit to target acquisition to do so.
+
+	Errors: IDChoice, Window, Value
+
+DestroyCursorBarrier
+
+		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..c2db307 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,35 @@ 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;
+} xXFixesCreateCursorBarrierReq;
+
+#define sz_xXFixesHideCursorReq 24
+
+typedef struct {
+    CARD8   reqType;
+    CARD8   xfixesReqType;
+    CARD16  length B16;
+    Barrier barrier B32;
+} xXFixesDestroyCursorBarrierReq;
+
+#define sz_xXFixesDestroyCursorBarrierReq 8
+
+#undef Barrier
 #undef Region
 #undef Picture
 #undef Window
diff --git a/xfixeswire.h b/xfixeswire.h
index 7b43f09..06222e1 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_XFixesCreateCursorBarrier	    31
+#define X_XFixesDestroyCursorBarrier	    32
 
-#define XFixesNumberRequests		    (X_XFixesShowCursor+1)
+#define XFixesNumberRequests		    (X_XFixesDestroyCursorBarrier+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.2.3



More information about the xorg-devel mailing list