[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