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 <[email protected]> > To: Thomas Zimmermann <[email protected]> > > 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 > [email protected] > http://lists.shr-project.org/mailman/listinfo/shr-devel -- Martin 'JaMa' Jansa jabber: [email protected]
pgpLqryJrUaWP.pgp
Description: PGP signature
_______________________________________________ Shr-devel mailing list [email protected] http://lists.shr-project.org/mailman/listinfo/shr-devel
