[Shr-Devel] Fwd: Re: [Shr-User] X screen rotation

Martin Jansa martin.jansa at gmail.com
Thu May 19 16:34:47 CEST 2011


On Thu, May 19, 2011 at 10:14:57AM +0200, Thomas Zimmermann wrote:
> 
> ----------  Forwarded Message  ----------
> 
> Subject: Re: [Shr-User] X screen rotation
> Date: Thursday 19 May 2011
> From: Benjamin Deering <ben_deering at swissmail.org>
> To: Thomas Zimmermann <ml at vdm-design.de>
> 
> Hello Thomas,
> 
> The latest SHR-U is now working on my phone with only a few minor issues 
> (accelerometers not working and no shr_elm_softkey on startup) and I 
> have made the changes to xserver-xorg-1.10 to get rotation working 
> again.  Attached is a patch with my changes.  I'm not subscribed to 
> shr-devel, so I was hoping you could forward it.
> 
> I have applied this patch to a fresh extract of 
> xorg-server-1.10.1.901.tar.bz2 and the result builds, so it should work.
> 
> Thanks,
> Ben

Thanks Ben! aplied in OE
http://git.openembedded.org/cgit.cgi/openembedded/commit/?h=org.openembedded.dev&id=d768394be933ac231e31197c4d0b65d499c0665c

will be in shr-u feeds later today

> diff -ur xorg-server-1.10.1.901//hw/xfree86/common/xf86Xinput.c git/xorg-server-1.10.1.901//hw/xfree86/common/xf86Xinput.c
> --- xorg-server-1.10.1.901//hw/xfree86/common/xf86Xinput.c	2011-04-28 09:25:00.000000000 +0200
> +++ git/xorg-server-1.10.1.901//hw/xfree86/common/xf86Xinput.c	2011-05-19 00:31:01.178439874 +0200
> @@ -99,6 +99,8 @@
>  		return;								\
>  	}
>  
> +#define RR_Rotate_All    (RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270)
> +
>  EventListPtr xf86Events = NULL;
>  
>  static int
> @@ -1408,4 +1410,73 @@
>      EnableDevice(dev, TRUE);
>  }
>  
> +/* Taken from evdev-properties.h. */
> +#define EVDEV_PROP_SWAP_AXES "Evdev Axes Swap"
> +#define EVDEV_PROP_INVERT_AXES "Evdev Axis Inversion"
> +
> +/* This is a hack until we get device -> CRTC association. */
> +void
> +xf86InputRotationNotify(Rotation rotation)
> +{
> +    DeviceIntPtr dev;
> +    //LocalDevicePtr local;
> +    int ret;
> +    int swap_axes = 0;
> +    CARD8 invert[2] = { 0, 0 };
> +    static Atom prop_swap = 0, prop_invert = 0;
> +    static int atom_generation = -1;
> +    
> +    if (atom_generation != serverGeneration) {
> +        prop_swap = 0;
> +        prop_invert = 0;
> +    }
> +
> +    switch (rotation & RR_Rotate_All) {
> +    case RR_Rotate_0:
> +        swap_axes = 1;
> +        invert[0] = 0;
> + 	 invert[1] = 0;
> +        break;
> +    case RR_Rotate_90:
> +        swap_axes = 0;
> +        invert[0] = 0;
> + 	 invert[1] = 1;
> +        break;
> +    case RR_Rotate_180:
> +        swap_axes = 1;
> +        invert[0] = 0;
> +        invert[1] = 0;
> +        break;
> +    case RR_Rotate_270:
> +        swap_axes = 0;
> +        invert[0] = 0;
> + 	 invert[1] = 1;
> +        break;
> +    }
> +
> +    if (!prop_swap)
> +        prop_swap = MakeAtom(EVDEV_PROP_SWAP_AXES,
> +                             strlen(EVDEV_PROP_SWAP_AXES), TRUE);
> +    if (!prop_invert)
> +        prop_invert = MakeAtom(EVDEV_PROP_INVERT_AXES,
> +                               strlen(EVDEV_PROP_INVERT_AXES), TRUE);
> +
> +    for (dev = inputInfo.devices; dev; dev = dev->next) {
> +        //local = dev->public.devicePrivate;
> +        ret = XIChangeDeviceProperty(dev, prop_swap, XA_INTEGER, 8,
> +                                     PropModeReplace, 1, &swap_axes, FALSE);
> +        if (ret != Success) {
> +            xf86Msg(X_ERROR, "Changing swap_xy property failed!\n");
> +            continue;
> +        }
> +        ret = XIChangeDeviceProperty(dev, prop_invert, XA_INTEGER, 8,
> +                                     PropModeReplace, 2, invert, FALSE);
> +        if (ret != Success) {
> +            xf86Msg(X_ERROR, "Changing invert property failed!\n");
> +            continue;
> +        }
> +    }
> +}
> +
> +
>  /* end of xf86Xinput.c */
> diff -ur xorg-server-1.10.1.901//hw/xfree86/modes/xf86Crtc.c git/xorg-server-1.10.1.901//hw/xfree86/modes/xf86Crtc.c
> --- xorg-server-1.10.1.901//hw/xfree86/modes/xf86Crtc.c	2011-04-28 09:25:00.000000000 +0200
> +++ git/xorg-server-1.10.1.901//hw/xfree86/modes/xf86Crtc.c	2011-05-19 00:23:16.244383998 +0200
> @@ -389,6 +389,12 @@
>      if (didLock)
>  	crtc->funcs->unlock (crtc);
>  
> +    /*
> +     * Rotate Touchscreen
> +     */
> +    xf86InputRotationNotify(crtc->rotation);
> +
> +    
>      return ret;
>  }
>  
> diff -ur xorg-server-1.10.1.901//randr/rrscreen.c git/xorg-server-1.10.1.901//randr/rrscreen.c
> --- xorg-server-1.10.1.901//randr/rrscreen.c	2011-02-25 04:27:32.000000000 +0100
> +++ git/xorg-server-1.10.1.901//randr/rrscreen.c	2011-05-18 23:19:39.007760004 +0200
> @@ -910,11 +910,6 @@
>       */
>      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;
> @@ -926,7 +921,12 @@
>  	free(pData);
>  	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;

> _______________________________________________
> Shr-devel mailing list
> Shr-devel at lists.shr-project.org
> http://lists.shr-project.org/mailman/listinfo/shr-devel


-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.shr-project.org/pipermail/shr-devel/attachments/20110519/54b64629/attachment.pgp>


More information about the Shr-devel mailing list