aa9281b2d2
- xserver-1.5.99.902-randr-soft-getpanning.patch: Fail RRGetPanning softly when the driver doesn't support it.
68 lines
2.3 KiB
Diff
68 lines
2.3 KiB
Diff
From 38eb087aba509d85bbbf0dabf501201fd6af1a32 Mon Sep 17 00:00:00 2001
|
|
From: Adam Jackson <ajax@redhat.com>
|
|
Date: Tue, 17 Feb 2009 12:59:16 -0500
|
|
Subject: [PATCH] RANDR: Fail softly on GetPanning if the screen can't do it.
|
|
|
|
Just return a zeroed-out reply in that case. This is unambiguous, and
|
|
distinguishes "you didn't name a CRTC" from "you named a CRTC that can't
|
|
do panning".
|
|
---
|
|
randr/rrcrtc.c | 33 +++++++++++++++++----------------
|
|
1 files changed, 17 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
|
|
index 2160834..7b724ae 100644
|
|
--- a/randr/rrcrtc.c
|
|
+++ b/randr/rrcrtc.c
|
|
@@ -1038,30 +1038,31 @@ ProcRRGetPanning (ClientPtr client)
|
|
pScreen = crtc->pScreen;
|
|
pScrPriv = rrGetScrPriv(pScreen);
|
|
|
|
- if (!pScrPriv || !pScrPriv->rrGetPanning)
|
|
+ if (!pScrPriv)
|
|
return RRErrorBase + BadRRCrtc;
|
|
|
|
+ memset(&rep, 0, sizeof(rep));
|
|
rep.type = X_Reply;
|
|
rep.status = RRSetConfigSuccess;
|
|
rep.sequenceNumber = client->sequence;
|
|
rep.length = 1;
|
|
rep.timestamp = pScrPriv->lastSetTime.milliseconds;
|
|
|
|
- if (! pScrPriv->rrGetPanning (pScreen, crtc, &total, &tracking, border))
|
|
- return RRErrorBase + BadRRCrtc;
|
|
-
|
|
- rep.left = total.x1;
|
|
- rep.top = total.y1;
|
|
- rep.width = total.x2 - total.x1;
|
|
- rep.height = total.y2 - total.y1;
|
|
- rep.track_left = tracking.x1;
|
|
- rep.track_top = tracking.y1;
|
|
- rep.track_width = tracking.x2 - tracking.x1;
|
|
- rep.track_height = tracking.y2 - tracking.y1;
|
|
- rep.border_left = border[0];
|
|
- rep.border_top = border[1];
|
|
- rep.border_right = border[2];
|
|
- rep.border_bottom = border[3];
|
|
+ if (pScrPriv->rrGetPanning &&
|
|
+ pScrPriv->rrGetPanning (pScreen, crtc, &total, &tracking, border)) {
|
|
+ rep.left = total.x1;
|
|
+ rep.top = total.y1;
|
|
+ rep.width = total.x2 - total.x1;
|
|
+ rep.height = total.y2 - total.y1;
|
|
+ rep.track_left = tracking.x1;
|
|
+ rep.track_top = tracking.y1;
|
|
+ rep.track_width = tracking.x2 - tracking.x1;
|
|
+ rep.track_height = tracking.y2 - tracking.y1;
|
|
+ rep.border_left = border[0];
|
|
+ rep.border_top = border[1];
|
|
+ rep.border_right = border[2];
|
|
+ rep.border_bottom = border[3];
|
|
+ }
|
|
|
|
if (client->swapped) {
|
|
swaps(&rep.sequenceNumber, n);
|
|
--
|
|
1.6.1.3
|
|
|