diff options
author | Adam Jackson <ajax@redhat.com> | 2009-02-17 12:59:16 -0500 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2009-02-17 13:57:02 -0500 |
commit | 123093996507c4d3b6dc457240ce00f8ac42f410 (patch) | |
tree | 9ce5fb42b6d7e76a2f8c47375641ca96152d4253 /randr | |
parent | b2ceea3635ec05dca9d4aa2f823b96ae9fce7fe8 (diff) |
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".
Diffstat (limited to 'randr')
-rw-r--r-- | randr/rrcrtc.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 216083432..7b724aefc 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); |