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".
This commit is contained in:
parent
b2ceea3635
commit
1230939965
|
@ -1038,30 +1038,31 @@ ProcRRGetPanning (ClientPtr client)
|
||||||
pScreen = crtc->pScreen;
|
pScreen = crtc->pScreen;
|
||||||
pScrPriv = rrGetScrPriv(pScreen);
|
pScrPriv = rrGetScrPriv(pScreen);
|
||||||
|
|
||||||
if (!pScrPriv || !pScrPriv->rrGetPanning)
|
if (!pScrPriv)
|
||||||
return RRErrorBase + BadRRCrtc;
|
return RRErrorBase + BadRRCrtc;
|
||||||
|
|
||||||
|
memset(&rep, 0, sizeof(rep));
|
||||||
rep.type = X_Reply;
|
rep.type = X_Reply;
|
||||||
rep.status = RRSetConfigSuccess;
|
rep.status = RRSetConfigSuccess;
|
||||||
rep.sequenceNumber = client->sequence;
|
rep.sequenceNumber = client->sequence;
|
||||||
rep.length = 1;
|
rep.length = 1;
|
||||||
rep.timestamp = pScrPriv->lastSetTime.milliseconds;
|
rep.timestamp = pScrPriv->lastSetTime.milliseconds;
|
||||||
|
|
||||||
if (! pScrPriv->rrGetPanning (pScreen, crtc, &total, &tracking, border))
|
if (pScrPriv->rrGetPanning &&
|
||||||
return RRErrorBase + BadRRCrtc;
|
pScrPriv->rrGetPanning (pScreen, crtc, &total, &tracking, border)) {
|
||||||
|
rep.left = total.x1;
|
||||||
rep.left = total.x1;
|
rep.top = total.y1;
|
||||||
rep.top = total.y1;
|
rep.width = total.x2 - total.x1;
|
||||||
rep.width = total.x2 - total.x1;
|
rep.height = total.y2 - total.y1;
|
||||||
rep.height = total.y2 - total.y1;
|
rep.track_left = tracking.x1;
|
||||||
rep.track_left = tracking.x1;
|
rep.track_top = tracking.y1;
|
||||||
rep.track_top = tracking.y1;
|
rep.track_width = tracking.x2 - tracking.x1;
|
||||||
rep.track_width = tracking.x2 - tracking.x1;
|
rep.track_height = tracking.y2 - tracking.y1;
|
||||||
rep.track_height = tracking.y2 - tracking.y1;
|
rep.border_left = border[0];
|
||||||
rep.border_left = border[0];
|
rep.border_top = border[1];
|
||||||
rep.border_top = border[1];
|
rep.border_right = border[2];
|
||||||
rep.border_right = border[2];
|
rep.border_bottom = border[3];
|
||||||
rep.border_bottom = border[3];
|
}
|
||||||
|
|
||||||
if (client->swapped) {
|
if (client->swapped) {
|
||||||
swaps(&rep.sequenceNumber, n);
|
swaps(&rep.sequenceNumber, n);
|
||||||
|
|
Loading…
Reference in New Issue