[PATCH] randr: check rotated virtual size limits correctly
Robert Hooker
sarvatt at ubuntu.com
Mon May 23 08:55:16 PDT 2011
On Thu, May 12, 2011 at 2:05 AM, Jeremy Huddleston <jeremyhu at apple.com> wrote:
> That looks like it does the right thing... (still... get a Tested-by:)
>
> Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
>
> On May 11, 2011, at 7:18 AM, Aaron Plattner wrote:
>
>> Commit d1107918d4626268803b54033a07405122278e7f introduced checks to
>> the RandR path that cause RRSetScreenConfig requests to fail if the
>> size is too large. Unfortunately, when RandR 1.1 rotation is enabled
>> it compares the rotated screen dimensions to the unrotated limits,
>> which causes 90- and 270-degree rotation to fail unless your screen
>> happens to be square:
>>
>> X Error of failed request: BadValue (integer parameter out of range for operation)
>> Major opcode of failed request: 153 (RANDR)
>> Minor opcode of failed request: 2 (RRSetScreenConfig)
>> Value in failed request: 0x780
>> Serial number of failed request: 14
>> Current serial number in output stream: 14
>>
>> Fix this by moving the check above the code that swaps the dimensions
>> based on the rotation.
>>
>> Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
>> ---
>> This patch is against server-1.10-branch.
>>
>> randr/rrscreen.c | 12 ++++++------
>> 1 files changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/randr/rrscreen.c b/randr/rrscreen.c
>> index 1bc1a9e..da6d48d 100644
>> --- a/randr/rrscreen.c
>> +++ b/randr/rrscreen.c
>> @@ -910,12 +910,6 @@ ProcRRSetScreenConfig (ClientPtr client)
>> */
>> width = mode->mode.width;
>> height = mode->mode.height;
>> - if (rotation & (RR_Rotate_90|RR_Rotate_270))
>> - {
>> - width = mode->mode.height;
>> - height = mode->mode.width;
>> - }
>> -
>> if (width < pScrPriv->minWidth || pScrPriv->maxWidth < width) {
>> client->errorValue = width;
>> free(pData);
>> @@ -927,6 +921,12 @@ ProcRRSetScreenConfig (ClientPtr client)
>> return BadValue;
>> }
>>
>> + if (rotation & (RR_Rotate_90|RR_Rotate_270))
>> + {
>> + width = mode->mode.height;
>> + height = mode->mode.width;
>> + }
>> +
>> if (width != pScreen->width || height != pScreen->height)
>> {
>> int c;
>> --
>> 1.7.4.1
>>
>> _______________________________________________
>> xorg-devel at lists.x.org: X.Org development
>> Archives: http://lists.x.org/archives/xorg-devel
>> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>>
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
It works here. Reference:
https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/740933
Tested-by: Robert Hooker <robert.hooker at canonical.com>
Tested-by: Kent Baxley <kent.baxley at canonical.com>
More information about the xorg-devel
mailing list