[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

x11proto-randr: Changes to 'upstream-unstable'



 configure.ac   |    2 
 randr.h        |   19 ++
 randrproto.h   |  152 +++++++++++++++++-
 randrproto.txt |  480 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 4 files changed, 624 insertions(+), 29 deletions(-)

New commits:
commit 3fdbdc2b0a971db7497c6e03e215fd19ec400ce9
Author: Matthias Hopf <mhopf@suse.de>
Date:   Fri Dec 12 12:41:21 2008 +0100

    Bump to 1.2.99.3

diff --git a/configure.ac b/configure.ac
index e7398d7..5c0cc88 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ([2.57])
-AC_INIT([RandrProto], [1.2.99.2], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AC_INIT([RandrProto], [1.2.99.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
 XORG_RELEASE_VERSION

commit 0c1527d2e89a807e54c549e44798e2cf63fafca2
Author: Matthias Hopf <mhopf@suse.de>
Date:   Thu Dec 11 17:15:15 2008 +0100

    Panning tracking areas describe full screen if set to 0.

diff --git a/randrproto.txt b/randrproto.txt
index 9b23120..e55140d 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1156,7 +1156,8 @@ dynamic changes in the display environment.
 	total screen size. If set to the total screen size, the CRTC will pan
 	in the remaining axis even if the pointer is outside the panning area
 	on a different CRTC, as shown in the figure above. If the pointer is
-	outside the tracking area, the CRTC will not pan.
+	outside the tracking area, the CRTC will not pan. Zero can be used as
+	an alias for the total screen size.
 
 	┌──┳━━━━━━━━━━━━━━┳────────────┐
 	│  ┃     CRTC     ┃            │

commit d904495a4cbd66850dc03d32f223aaaf8425f077
Author: Adam Jackson <ajax@redhat.com>
Date:   Wed Dec 10 11:15:48 2008 -0500

    Add [GS]etOutputPrimary

diff --git a/randr.h b/randr.h
index 92f2fb6..eafcda5 100644
--- a/randr.h
+++ b/randr.h
@@ -44,7 +44,7 @@ typedef unsigned long	XRandrModeFlags;
 
 #define RRNumberErrors		3
 #define RRNumberEvents		2
-#define RRNumberRequests	30
+#define RRNumberRequests	32
 
 #define X_RRQueryVersion	0
 /* we skip 1 to make old clients fail pretty immediately */
@@ -84,6 +84,8 @@ typedef unsigned long	XRandrModeFlags;
 #define X_RRGetCrtcTransform	    27
 #define X_RRGetPanning		    28
 #define X_RRSetPanning		    29
+#define X_RRSetOutputPrimary	    30
+#define X_RRGetOutputPrimary	    31
 
 #define RRTransformUnit		    (1L << 0)
 #define RRTransformScaleUp	    (1L << 1)
diff --git a/randrproto.h b/randrproto.h
index b434b3a..3b98a9f 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -614,6 +614,37 @@ typedef struct {
 
 #define sz_xRRGetCrtcTransformReply	96
 
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    Window	window B32;
+    RROutput	output B32;
+} xRRSetOutputPrimaryReq;
+#define sz_xRRSetOutputPrimaryReq	12
+
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    Window	window B32;
+} xRRGetOutputPrimaryReq;
+#define sz_xRRGetOutputPrimaryReq	8
+
+typedef struct {
+    BYTE	type;
+    CARD8	pad;
+    CARD16	sequenceNumber B16;
+    CARD32	length B32;
+    RROutput	output B32;
+    CARD32	pad1 B32;
+    CARD32	pad2 B32;
+    CARD32	pad3 B32;
+    CARD32	pad4 B32;
+    CARD32	pad5 B32;
+} xRRGetOutputPrimaryReply;
+#define sz_xRRGetOutputPrimaryReply	32
+
 /*
  * event
  */
diff --git a/randrproto.txt b/randrproto.txt
index 65b122d..9b23120 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1193,6 +1193,51 @@ dynamic changes in the display environment.
 	'new-time-stamp' contains the time at which this request was
 	executed.
 
+┌───
+    RRSetOutputPrimary
+	window: WINDOW
+	output: OUTPUT
+└───
+	Errors: Match, Output, Window
+
+	RRSetOutputPrimary marks 'output' as the primary output for the
+	screen with the same root window as 'window'. This output's CRTC
+	will be sorted to the front of the list in Xinerama and RANDR
+	geometry requests for the benefit of older applications. The
+	default primary output is None, and None is a legal value to pass
+	to RRSetOutputPrimary. This request is expected to be used by
+	desktop environments to mark the screen that should hold the primary
+	menu bar or panel.
+
+	If the named output is not connected to any CRTC, or if the Window
+	and Output are not attached to the same screen, BadMatch is generated.
+	In the latter case, errorValue will be the Window, not the Output.
+
+	As this changes the logical layout of the screen, ConfigureNotify
+	and RRScreenChangeNotify will be generated on the appropriate root
+	window when the primary output is changed by this call. This request
+	also generates RROutputChangeNotify events on the outputs that gained
+	and lost primary status.
+
+	If an output is disconnected asynchronously (eg. due to recabling),
+	the primary status does not change, but RROutputChangeNotify events
+	will be generated if the hardware is capable of detecting this;
+	clients are expected to reconfigure if appropriate.
+
+	If an output is deleted (eg. due to device hotplug), the server will
+	act as though None was passed to RRSetOutputPrimary, including
+	generating the appropriate events.
+
+┌───
+    RRGetOutputPrimary
+	window: WINDOW
+      ▶
+	output: OUTPUT
+└───
+	Errors: Window
+
+	RRGetOutputPrimary returns the primary output for the system.
+
                               ❧❧❧❧❧❧❧❧❧❧❧
 
 8. Extension Events
@@ -1360,7 +1405,7 @@ list of what each version provided:
 	     modes
 
 	1.3: Added cheap version of RRGetScreenResources.  Added CRTC
-	     transformations.  Added panning.
+	     transformations.  Added panning.  Added primary outputs.
 
 Compatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients
 will fail against 1.0 servers. The wire encoding op-codes were
@@ -1369,8 +1414,9 @@ graceful way. Version 1.1 servers and clients are cross compatible with
 1.0. Version 1.1 is considered to be stable and we intend upward
 compatibility from this point. Version 1.2 offers an extended model of the
 system with multiple output support. Version 1.3 adds a cheap version of
-GetScreenResources to avoid expensive DDC operations, and CRTC
-transformations. 1.2 and 1.3 are backward-compatible with 1.1.
+GetScreenResources to avoid expensive DDC operations, CRTC transformations,
+panning, and the primary output concept. 1.2 and 1.3 are backward-compatible
+with 1.1.
 
                               ❧❧❧❧❧❧❧❧❧❧❧
 
@@ -2038,6 +2084,33 @@ A.2.2 Protocol Requests added with version 1.3
 	20				unused
 └───
 
+┌───
+    RRSetOutputPrimary
+	1	CARD8			major opcode
+	1	30			RandR opcode
+	2	3			length
+	4	WINDOW			window
+	4	OUTPUT			output
+└───
+    
+┌───
+    RRGetOutputPrimary
+	1	CARD8			major opcode
+	1	31			RandR opcode
+	2	2			length
+	4	WINDOW			window
+      ▶
+	1	1			Reply
+	1				unused
+	2	CARD16			sequence number
+	4	CARD32			length
+	4	OUTPUT			output
+	4	CARD32			pad1
+	4	CARD32			pad2
+	4	CARD32			pad3
+	4	CARD32			pad4
+└───
+
 A.3 Protocol Events
 
 ┌───

commit e71912062f3985dd2f4d7b37e415b4a614b51d9b
Author: Matthias Hopf <mhopf@suse.de>
Date:   Mon Dec 8 14:40:07 2008 +0100

    Add unicode art pictures for panning.

diff --git a/randrproto.txt b/randrproto.txt
index 5244379..65b122d 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -120,7 +120,10 @@ following features are added in this version:
      support made it trivial to add full projective transformations. These
      can be used to scale the screen up/down as well as perform projector
      keystone correct or other effects.
-     
+
+   • Panning. It was removed with RandR 1.2 because the old semantics didn't
+     fit any longer. With RandR 1.3 panning can be specified per crtc.
+
 1.1 Acknowledgements
 
 Our thanks to the contributors to the design found on the xpert mailing
@@ -1116,6 +1119,16 @@ dynamic changes in the display environment.
 	successfully set, the request is ignored and InvalidTime returned in
 	status.
 
+	┌──┳━━━━━━━━━━━━━━┳─────┬ ─ ─ ─ ─ ─ ┐
+	│  ┃     CRTC     ┃     │
+	│  ┃              ┃     │           │
+	│  ┃             X┃→    │
+	│  ┃              ┃     │           │  framebuffer
+	│  ┗━━━━━━━━━━━━━━┛     │
+	│                       │           │
+	│panning area           │
+	└───────────────────────┴ ─ ─ ─ ─ ─ ┘
+
 	'left', 'top', 'width', and 'height' contain the total panning area
 	for this CRTC.  'width' has to be larger than or equal to the CRTC's
 	width or 0, and 'left'+'width' must be within the screen size, else a
@@ -1126,13 +1139,35 @@ dynamic changes in the display environment.
 	RRSetScreenSize will silently enable panning if the screen size is
 	increased. This does not happen if set to 0.
 
+	┌────────┳━━━━━━━━━━━━━━┳ ─ ─ ─ ─ ─ ┐
+	│        ┃     CRTC     ┃
+	│        ┃              ┃           │
+	│        ┃              ┃
+	│        ┃              ┃           │  tracking area
+	│        ┗━━━━━━━━━━━━━━┫     X
+	│               ↓       │     ↓     │
+	│panning area           │
+	└───────────────────────┴ ─ ─ ─ ─ ─ ┘
+
 	'track_left', 'track_top', 'track_width', and 'track_height' contain
 	the pointer area for which the panning region is updated.  For normal
 	use cases it should enclose the panning area minus borders, and is
 	typically set to either the panning area minus borders, or to the
 	total screen size. If set to the total screen size, the CRTC will pan
 	in the remaining axis even if the pointer is outside the panning area
-	on a different CRTC.
+	on a different CRTC, as shown in the figure above. If the pointer is
+	outside the tracking area, the CRTC will not pan.
+
+	┌──┳━━━━━━━━━━━━━━┳────────────┐
+	│  ┃     CRTC     ┃            │
+	│  ┃              ┃            │
+	│  ┃              ┃→           │
+	│  ┃           X←→┃            │
+	│  ┃       border_right        │
+	│  ┗━━━━━━━━━━━━━━┛            │
+	│                              │
+	│panning area                  │
+	└──────────────────────────────┘
 
 	'border_left', 'border_top', 'border_right', and 'border_bottom'
 	define the distances from the CRTC borders that will activate panning
@@ -1140,7 +1175,7 @@ dynamic changes in the display environment.
 	when the pointer hits the CRTC borders (behavior of pre-RandR Xserver
 	panning).  If the borders are positive, the screen will pan when the
 	pointer gets close to the CRTC borders, if they are negative, the
-	screen will only pan when the pointer is already way past the CRTC 
+	screen will only pan when the pointer is already way past the CRTC
 	borders.  Negative values might confuse users and disable panning to
 	the very edges of the screen.  Thus they are discouraged.
 	border_left + border_right has to be lower or equal than the CRTC's

commit 19a851fc85192906586138c5b17740ba28328eaa
Author: Matthias Hopf <mhopf@suse.de>
Date:   Thu Dec 4 15:45:23 2008 +0100

    Bump to 1.2.99.2

diff --git a/configure.ac b/configure.ac
index d4aeffb..e7398d7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ([2.57])
-AC_INIT([RandrProto], [1.2.99.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
+AC_INIT([RandrProto], [1.2.99.2], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 
 XORG_RELEASE_VERSION

commit fb1f243716282f442235323834fec50aab7fe2f7
Author: Matthias Hopf <mhopf@suse.de>
Date:   Thu Dec 4 15:44:12 2008 +0100

    Nuke config-timestamp for panning. Specifying panning update on screen size change.

diff --git a/randrproto.h b/randrproto.h
index 324455e..11143c5 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -705,9 +705,8 @@ typedef struct {
     CARD8	randrReqType;
     CARD16	length B16;
     RRCrtc	crtc B32;
-    Time	configTimestamp B32;
 } xRRGetPanningReq; 
-#define sz_xRRGetPanningReq		12
+#define sz_xRRGetPanningReq		8
 
 typedef struct {
     BYTE	type;
@@ -736,7 +735,6 @@ typedef struct {
     CARD16	length B16;
     RRCrtc	crtc B32;
     Time	timestamp B32;
-    Time    	configTimestamp B32;
     CARD16	left B16;
     CARD16	top B16;
     CARD16	width B16;
@@ -750,7 +748,7 @@ typedef struct {
     INT16	border_right B16;
     INT16	border_bottom B16;
 } xRRSetPanningReq; 
-#define sz_xRRSetPanningReq		40
+#define sz_xRRSetPanningReq		36
 
 typedef struct {
     BYTE	type;
diff --git a/randrproto.txt b/randrproto.txt
index 1d248e1..5244379 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -508,12 +508,11 @@ dynamic changes in the display environment.
 	extension and the core protocol. They must be non-zero, or Value
 	error results.
 
-	Note that changes to the screen size might invalidate panning
-	parameters.  In these cases panning might be silently disabled, or the
-	panning parameters are updated automatically as necessary.  The exact
-	behavior of the implementation is undefined.  If the panning parameters
-	do not conflict with new screen size, panning remains enabled
-	unchanged.
+	If panning is enabled, the width and height of the panning and the
+	tracking areas are adapted to the new size and clamped afterwards.
+	Disabled panning axes remain disabled.
+	Panning borders are disabled if their requirements are no longer met
+	(see RRSetPanning).
 
 ┌───
     RRGetScreenResources
@@ -945,11 +944,11 @@ dynamic changes in the display environment.
 	then re-enabling the CRTC at the new configuration to avoid an
 	invalid intermediate configuration.
 
-	Note that changes to the CRTC might invalidate panning parameters.  In
-	these cases panning might be silently disabled, or the panning
-	parameters are updated automatically as necessary.  The exact behavior
-	of the implementation is undefined.  If the panning parameters do not
-	conflict with new CRTC parameters, panning remains enabled unchanged.
+	If panning is enabled, the width and height of the panning and the
+	tracking areas are clamped to the new mode size.
+	Disabled panning axes remain disabled.
+	Panning borders are disabled if their requirements are no longer met
+	(see RRSetPanning).
 
 	When this request succeeds, 'status' contains Success and the
 	requested changes to configuration will have been made.
@@ -1077,7 +1076,6 @@ dynamic changes in the display environment.
 ┌───
     RRGetPanning
 	crtc: CRTC
-	config-timestamp: TIMESTAMP
       ▶
 	status: RRCONFIGSTATUS
 	timestamp: TIMESTAMP
@@ -1093,11 +1091,6 @@ dynamic changes in the display environment.
 	RRGetPanning returns information about the currently set panning
 	configuration for the specified crtc.
 
-	If 'config-timestamp' does not match the current configuration
-	timestamp (as returned by RRGetScreenResources), 'status' is set to
-	InvalidConfigTime and the remaining reply data is empty. Otherwise,
-	'status' is set to Success.
-
 	'timestamp' indicates when the configuration was last set.
 
 	All other entries are explained for RRSetPanning.
@@ -1106,7 +1099,6 @@ dynamic changes in the display environment.
     RRSetPanning
 	crtc: CRTC
 	timestamp: TIMESTAMP
-	config-timestamp: TIMESTAMP
 	left, top, width, height: CARD16
 	track_left, track_top, track_width, track_height: CARD16
 	border_left, border_top, border_right, border_bottom: INT16
@@ -1116,23 +1108,23 @@ dynamic changes in the display environment.
 └───
 	Errors: Crtc, Match
 
+	This request sets the panning parameters.  As soon as panning is
+	enabled, the CRTC position can change with every pointer move.
+	RRCrtcChangeNotify events are sent to the clients requesting those.
+
 	If 'timestamp' is less than the time when the configuration was last
 	successfully set, the request is ignored and InvalidTime returned in
 	status.
-	
-	If 'config-timestamp' is not equal to when the CRTC's configuration
-	last changed, the request is ignored and InvalidConfigTime returned in
-	status. This could occur if the CRTC changed since you last made a
-	RRGetCrtcInfo request, perhaps by setting a different mode.  Rather
-	than allowing an incorrect call to be executed based on stale data,
-	the server will ignore the request.
 
 	'left', 'top', 'width', and 'height' contain the total panning area
-	for this CRTC.  'width' has to be larger than the CRTC's width, and
-	'left'+'width' must be within the screen size, else a Match error
-	results.  Equivalent restrictions for the height exist.  The exception
-	is 'width' == 'height' == 0 which indicates that panning should be
-	disabled.
+	for this CRTC.  'width' has to be larger than or equal to the CRTC's
+	width or 0, and 'left'+'width' must be within the screen size, else a
+	Match error results.  Equivalent restrictions for the height exist.
+	'width' or 'height' set to 0 indicate that panning should be disabled
+	on the according axis.  Setting 'width'/'height' to the CRTC's
+	width/height will disable panning on the X/Y axis as well, but
+	RRSetScreenSize will silently enable panning if the screen size is
+	increased. This does not happen if set to 0.
 
 	'track_left', 'track_top', 'track_width', and 'track_height' contain
 	the pointer area for which the panning region is updated.  For normal
@@ -1149,21 +1141,16 @@ dynamic changes in the display environment.
 	panning).  If the borders are positive, the screen will pan when the
 	pointer gets close to the CRTC borders, if they are negative, the
 	screen will only pan when the pointer is already way past the CRTC 
-	borders.  Negative values might confuse users and are discouraged.
+	borders.  Negative values might confuse users and disable panning to
+	the very edges of the screen.  Thus they are discouraged.
 	border_left + border_right has to be lower or equal than the CRTC's
 	width, else a Match error results.  An equivalent restriction for the
 	height exists.
 
-	This request sets the panning parameters.  As soon as panning is
-	enabled, the CRTC position can change with every pointer move.
-	RRCrtcChangeNotify events are sent to the clients requesting those.
-
-	Note that changes to the CRTC or screen might invalidate panning
-	parameters.  In these cases panning might be silently disabled, or the
-	panning parameters are updated automatically as necessary.  The exact
-	behavior of the implementation is undefined.  If the panning parameters
-	do not conflict with new CRTC parameters or screen size, panning
-	remains enabled unchanged.
+	Screen size changes update the panning and the tracking areas to the
+	new size. Both screen size changes and mode changes clamp these areas
+	to the current CRTC size.  In these cases panning borders are disabled
+	if their requirements are no longer met.
 
 	When this request succeeds, 'status' contains Success and the
 	requested changes to configuration will have been made.
@@ -1967,9 +1954,8 @@ A.2.2 Protocol Requests added with version 1.3
     RRGetPanning
 	1	CARD8			major opcode
 	1	28			RandR opcode
-	2	3			length
+	2	2			length
 	4	CRTC			crtc
-	4	TIMESTAMP		config-timestamp
       ▶
 	1	1			Reply
 	1	RRCONFIGSTATUS		status
@@ -1993,10 +1979,9 @@ A.2.2 Protocol Requests added with version 1.3
     RRSetPanning
 	1	CARD8			major opcode
 	1	29			RandR opcode
-	2	10			length
+	2	9			length
 	4	CRTC			crtc
 	4	TIMESTAMP		timestamp
-	4	TIMESTAMP		config-timestamp
 	2	CARD16			left
 	2	CARD16			top
 	2	CARD16			width

commit 425468e9a29071823316bfc027bc80eb20acc61e
Author: Matthias Hopf <mhopf@suse.de>
Date:   Thu Dec 4 12:57:33 2008 +0100

    Add panning to versioning information.

diff --git a/randrproto.txt b/randrproto.txt
index d92b814..1d248e1 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1338,7 +1338,7 @@ list of what each version provided:
 	     modes
 
 	1.3: Added cheap version of RRGetScreenResources.  Added CRTC
-	     transformations.
+	     transformations.  Added panning.
 
 Compatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients
 will fail against 1.0 servers. The wire encoding op-codes were

commit 419a0f20746d9f3e8962ea3294568343d9877b2c
Author: Matthias Hopf <mhopf@suse.de>
Date:   Fri Nov 28 18:30:22 2008 +0100

    Panning protocol bits description

diff --git a/randrproto.txt b/randrproto.txt
index 5ebbcd9..d92b814 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1963,6 +1963,61 @@ A.2.2 Protocol Requests added with version 1.3
 	4*cf	FIXED			current filter params
 └───
     
+┌───
+    RRGetPanning
+	1	CARD8			major opcode
+	1	28			RandR opcode
+	2	3			length
+	4	CRTC			crtc
+	4	TIMESTAMP		config-timestamp
+      ▶
+	1	1			Reply
+	1	RRCONFIGSTATUS		status
+	2	CARD16			sequence number
+	4	1			reply length
+	4	TIMESTAMP		timestamp
+	2	CARD16			left
+	2	CARD16			top
+	2	CARD16			width
+	2	CARD16			height
+	2	CARD16			track_left
+	2	CARD16			track_top
+	2	CARD16			track_width
+	2	CARD16			track_height
+	2	INT16			border_left
+	2	INT16			border_top
+	2	INT16			border_right
+	2	INT16			border_bottom
+└───
+┌───
+    RRSetPanning
+	1	CARD8			major opcode
+	1	29			RandR opcode
+	2	10			length
+	4	CRTC			crtc
+	4	TIMESTAMP		timestamp
+	4	TIMESTAMP		config-timestamp
+	2	CARD16			left
+	2	CARD16			top
+	2	CARD16			width
+	2	CARD16			height
+	2	CARD16			track_left
+	2	CARD16			track_top
+	2	CARD16			track_width
+	2	CARD16			track_height
+	2	INT16			border_left
+	2	INT16			border_top
+	2	INT16			border_right
+	2	INT16			border_bottom
+      ▶
+	1	1			Reply
+	1	RRCONFIGSTATUS		status
+	2	CARD16			sequence number
+	4	0			reply length
+	4	TIMESTAMP		new timestamp
+	20				unused
+└───
+
 A.3 Protocol Events
 
 ┌───

commit 6b5d4ce8943c1d39392a0536d426fe27a9161b04
Author: Matthias Hopf <mhopf@suse.de>
Date:   Fri Nov 28 18:29:19 2008 +0100

    Panning protocol description

diff --git a/randrproto.txt b/randrproto.txt
index b23e415..5ebbcd9 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -508,6 +508,13 @@ dynamic changes in the display environment.
 	extension and the core protocol. They must be non-zero, or Value
 	error results.
 
+	Note that changes to the screen size might invalidate panning
+	parameters.  In these cases panning might be silently disabled, or the
+	panning parameters are updated automatically as necessary.  The exact
+	behavior of the implementation is undefined.  If the panning parameters
+	do not conflict with new screen size, panning remains enabled
+	unchanged.
+
 ┌───
     RRGetScreenResources
 	window: WINDOW
@@ -938,6 +945,12 @@ dynamic changes in the display environment.
 	then re-enabling the CRTC at the new configuration to avoid an
 	invalid intermediate configuration.
 
+	Note that changes to the CRTC might invalidate panning parameters.  In
+	these cases panning might be silently disabled, or the panning
+	parameters are updated automatically as necessary.  The exact behavior
+	of the implementation is undefined.  If the panning parameters do not
+	conflict with new CRTC parameters, panning remains enabled unchanged.
+
 	When this request succeeds, 'status' contains Success and the
 	requested changes to configuration will have been made.
 	
@@ -1061,6 +1074,103 @@ dynamic changes in the display environment.
 	transform if no new pending transform has been set since the last call
 	to RRSetCrtcConfig.
 
+┌───
+    RRGetPanning
+	crtc: CRTC
+	config-timestamp: TIMESTAMP
+      ▶
+	status: RRCONFIGSTATUS
+	timestamp: TIMESTAMP
+	left, top, width, height: CARD16
+	track_left, track_top, track_width, track_height: CARD16
+	border_left, border_top, border_right, border_bottom: INT16
+└───
+
+	Errors: Crtc
+
+	Version 1.3 adds panning support again. If multiple crtcs are active
+	the panning behavior can be defined per crtc individually.
+	RRGetPanning returns information about the currently set panning
+	configuration for the specified crtc.
+
+	If 'config-timestamp' does not match the current configuration
+	timestamp (as returned by RRGetScreenResources), 'status' is set to
+	InvalidConfigTime and the remaining reply data is empty. Otherwise,
+	'status' is set to Success.
+
+	'timestamp' indicates when the configuration was last set.
+
+	All other entries are explained for RRSetPanning.
+
+┌───
+    RRSetPanning
+	crtc: CRTC
+	timestamp: TIMESTAMP
+	config-timestamp: TIMESTAMP
+	left, top, width, height: CARD16
+	track_left, track_top, track_width, track_height: CARD16
+	border_left, border_top, border_right, border_bottom: INT16
+      ▶
+	status: RRCONFIGSTATUS
+	new-timestamp: TIMESTAMP
+└───
+	Errors: Crtc, Match
+
+	If 'timestamp' is less than the time when the configuration was last
+	successfully set, the request is ignored and InvalidTime returned in
+	status.
+	
+	If 'config-timestamp' is not equal to when the CRTC's configuration
+	last changed, the request is ignored and InvalidConfigTime returned in
+	status. This could occur if the CRTC changed since you last made a
+	RRGetCrtcInfo request, perhaps by setting a different mode.  Rather
+	than allowing an incorrect call to be executed based on stale data,
+	the server will ignore the request.
+
+	'left', 'top', 'width', and 'height' contain the total panning area
+	for this CRTC.  'width' has to be larger than the CRTC's width, and
+	'left'+'width' must be within the screen size, else a Match error
+	results.  Equivalent restrictions for the height exist.  The exception
+	is 'width' == 'height' == 0 which indicates that panning should be
+	disabled.
+
+	'track_left', 'track_top', 'track_width', and 'track_height' contain
+	the pointer area for which the panning region is updated.  For normal
+	use cases it should enclose the panning area minus borders, and is
+	typically set to either the panning area minus borders, or to the
+	total screen size. If set to the total screen size, the CRTC will pan
+	in the remaining axis even if the pointer is outside the panning area
+	on a different CRTC.
+
+	'border_left', 'border_top', 'border_right', and 'border_bottom'
+	define the distances from the CRTC borders that will activate panning
+	if the pointer hits them.  If the borders are 0, the screen will pan
+	when the pointer hits the CRTC borders (behavior of pre-RandR Xserver
+	panning).  If the borders are positive, the screen will pan when the
+	pointer gets close to the CRTC borders, if they are negative, the
+	screen will only pan when the pointer is already way past the CRTC 
+	borders.  Negative values might confuse users and are discouraged.
+	border_left + border_right has to be lower or equal than the CRTC's
+	width, else a Match error results.  An equivalent restriction for the
+	height exists.
+
+	This request sets the panning parameters.  As soon as panning is
+	enabled, the CRTC position can change with every pointer move.
+	RRCrtcChangeNotify events are sent to the clients requesting those.
+
+	Note that changes to the CRTC or screen might invalidate panning
+	parameters.  In these cases panning might be silently disabled, or the
+	panning parameters are updated automatically as necessary.  The exact
+	behavior of the implementation is undefined.  If the panning parameters
+	do not conflict with new CRTC parameters or screen size, panning
+	remains enabled unchanged.
+
+	When this request succeeds, 'status' contains Success and the
+	requested changes to configuration will have been made.
+
+	'new-time-stamp' contains the time at which this request was
+	executed.
+
                               ❧❧❧❧❧❧❧❧❧❧❧
 
 8. Extension Events

commit abe956221670598a5fd0f77107a3471c2fcf84df
Author: Matthias Hopf <mhopf@suse.de>
Date:   Fri Nov 28 17:22:23 2008 +0100

    Panning protocol extension

diff --git a/randr.h b/randr.h
index 87cd4a8..92f2fb6 100644
--- a/randr.h
+++ b/randr.h
@@ -44,7 +44,7 @@ typedef unsigned long	XRandrModeFlags;
 
 #define RRNumberErrors		3
 #define RRNumberEvents		2
-#define RRNumberRequests	28
+#define RRNumberRequests	30
 
 #define X_RRQueryVersion	0
 /* we skip 1 to make old clients fail pretty immediately */
@@ -82,6 +82,8 @@ typedef unsigned long	XRandrModeFlags;
 #define X_RRGetScreenResourcesCurrent	25
 #define X_RRSetCrtcTransform	    26
 #define X_RRGetCrtcTransform	    27
+#define X_RRGetPanning		    28
+#define X_RRSetPanning		    29
 
 #define RRTransformUnit		    (1L << 0)
 #define RRTransformScaleUp	    (1L << 1)
diff --git a/randrproto.h b/randrproto.h
index f8aac94..324455e 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -700,6 +700,72 @@ typedef struct {
 } xRROutputPropertyNotifyEvent;
 #define sz_xRROutputPropertyNotifyEvent	32
 
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    RRCrtc	crtc B32;
+    Time	configTimestamp B32;
+} xRRGetPanningReq; 
+#define sz_xRRGetPanningReq		12
+
+typedef struct {
+    BYTE	type;
+    CARD8	status;
+    CARD16	sequenceNumber B16;
+    CARD32	length B32;
+    Time	timestamp B32;
+    CARD16	left B16;
+    CARD16	top B16;
+    CARD16	width B16;
+    CARD16	height B16;
+    CARD16	track_left B16;
+    CARD16	track_top B16;
+    CARD16	track_width B16;
+    CARD16	track_height B16;
+    INT16	border_left B16;
+    INT16	border_top B16;
+    INT16	border_right B16;
+    INT16	border_bottom B16;
+} xRRGetPanningReply;
+#define sz_xRRGetPanningReply		36
+
+typedef struct {
+    CARD8	reqType;
+    CARD8	randrReqType;
+    CARD16	length B16;
+    RRCrtc	crtc B32;
+    Time	timestamp B32;
+    Time    	configTimestamp B32;
+    CARD16	left B16;
+    CARD16	top B16;
+    CARD16	width B16;
+    CARD16	height B16;
+    CARD16	track_left B16;
+    CARD16	track_top B16;
+    CARD16	track_width B16;
+    CARD16	track_height B16;
+    INT16	border_left B16;
+    INT16	border_top B16;
+    INT16	border_right B16;
+    INT16	border_bottom B16;
+} xRRSetPanningReq; 
+#define sz_xRRSetPanningReq		40
+
+typedef struct {
+    BYTE	type;
+    CARD8	status;
+    CARD16	sequenceNumber B16;
+    CARD32	length B32;
+    Time	newTimestamp B32;
+    CARD32      pad1 B32;
+    CARD32      pad2 B32;
+    CARD32      pad3 B32;
+    CARD32      pad4 B32;
+    CARD32      pad5 B32;
+} xRRSetPanningReply;
+#define sz_xRRSetPanningReply	32
+
 #undef RRModeFlags
 #undef RRCrtc
 #undef RRMode

commit 546906dbe29816adaa6a35277266d79fbe131d0c
Author: Adam Jackson <ajax@redhat.com>
Date:   Wed Dec 3 13:36:00 2008 -0500

    Indent CRTC transform docs to match the rest of the requests.

diff --git a/randrproto.txt b/randrproto.txt
index fb52497..b23e415 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1024,24 +1024,25 @@ dynamic changes in the display environment.
 └───
 	Errors: Crtc, Match
 
-This request provides a mechanism that is more general than the existing
-rotation and reflection values for describing the transformation from frame
-buffer image to crtc presentation. 'transform' is a full 2D projective
-transformations from screen coordinate space to crtc coordinate space. This
-transformation is applied before the rotation and reflection values to
-compute the complete transform.
+	This request provides a mechanism that is more general than the
+	existing rotation and reflection values for describing the
+	transformation from frame buffer image to crtc presentation.
+	'transform' is a full 2D projective transformation from screen
+	coordinate space to crtc coordinate space. This transformation is
+	applied before the rotation and reflection values to compute the
+	complete transform.
 
-'filter' and 'values' specify a Render filter that may be used by the server
-when transforming data from frame buffer to crtc.
+	'filter' and 'values' specify a Render filter that may be used by the
+	server when transforming data from frame buffer to crtc.
 
-This request sets the transform to be used at the next RRSetCrtcConfig
-request execution; it does not cause any change to occur in the current
-configuration.
+	This request sets the transform to be used at the next
+	RRSetCrtcConfig request execution; it does not cause any change to
+	occur in the current configuration.
 
-When a non-identity transformation is in use, the rectangle returned by
-RRGetCrtcInfo defines the bounding rectangle of the screen that is projected
-to the crtc. It is this projected rectangle which must be within the area of
-the screen when the mode is set.
+	When a non-identity transformation is in use, the rectangle returned
+	by RRGetCrtcInfo defines the bounding rectangle of the screen that is
+	projected to the crtc. It is this projected rectangle which must be
+	within the area of the screen when the mode is set.
 
 ┌───
     RRGetCrtcTransform
@@ -1055,9 +1056,10 @@ the screen when the mode is set.
 	current-values: LISTofFIXED
 └───
 
-This request returns the pending and current transforms for the specified
-CRTC. The pending transform will be the same as the current transform if no
-new pending transform has been set since the last call to RRSetCrtcConfig.
+	This request returns the pending and current transforms for the
+	specified CRTC. The pending transform will be the same as the current
+	transform if no new pending transform has been set since the last call
+	to RRSetCrtcConfig.
 
                               ❧❧❧❧❧❧❧❧❧❧❧
 

commit 5d5e4cff8c69d36d10e682d59c9a9005a8b5ad18
Author: Adam Jackson <ajax@redhat.com>
Date:   Wed Dec 3 12:02:18 2008 -0500

    More doc for CRTC transforms

diff --git a/randrproto.txt b/randrproto.txt
index 58c9e40..fb52497 100644
--- a/randrproto.txt
+++ b/randrproto.txt
@@ -1225,7 +1225,8 @@ list of what each version provided:
 	1.2: Separate screens from CRTCs and outputs, switch to full VESA
 	     modes
 
-	1.3: Added cheap version of RRGetScreenResources.
+	1.3: Added cheap version of RRGetScreenResources.  Added CRTC
+	     transformations.
 
 Compatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients
 will fail against 1.0 servers. The wire encoding op-codes were
@@ -1233,9 +1234,9 @@ changed for GetScreenInfo to ensure this failure in a relatively
 graceful way. Version 1.1 servers and clients are cross compatible with
 1.0. Version 1.1 is considered to be stable and we intend upward
 compatibility from this point. Version 1.2 offers an extended model of the
-system with multiple output support. It offers backward compatibility with
-version 1.1. Version 1.3 adds a cheap version of GetScreenResources to
-avoid expensive DDC operations.
+system with multiple output support. Version 1.3 adds a cheap version of
+GetScreenResources to avoid expensive DDC operations, and CRTC
+transformations. 1.2 and 1.3 are backward-compatible with 1.1.
 
                               ❧❧❧❧❧❧❧❧❧❧❧
 

commit ad6501790bbaff528cf247df24ddb7de27576a11
Author: Keith Packard <keithp@keithp.com>
Date:   Wed Nov 26 15:47:18 2008 -0800

    Remove duplicate GetScreenResourcesCurrent declarations
    
    Signed-off-by: Keith Packard <keithp@keithp.com>

diff --git a/randrproto.h b/randrproto.h
index f8aac94..215bde3 100644
--- a/randrproto.h
+++ b/randrproto.h
@@ -567,29 +567,12 @@ typedef struct {
  * Additions for V1.3
  */
 
-typedef struct {
-    CARD8   reqType;
-    CARD8   randrReqType;
-    CARD16  length B16;
-    Window  window B32;
-} xRRGetScreenResourcesCurrentReq;
-#define sz_xRRGetScreenResourcesCurrentReq 8
+typedef xRRGetScreenResourcesReq xRRGetScreenResourcesCurrentReq;
 
-typedef struct {
-    BYTE	type;
-    CARD8	pad;
-    CARD16	sequenceNumber B16;
-    CARD32	length B32;


Reply to: