[PATCH] randr: check rotated virtual size limits correctly

Jeremy Huddleston jeremyhu at apple.com
Wed May 11 23:05:23 PDT 2011


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
> 



More information about the xorg-devel mailing list