Am 06.07.2010 22:39, schrieb Peter Hutterer: >>> what changes did you have planned? >> Well, I thought I'd make a function which does common >> post-initialization (post = after driver inited structs). To be >> sensible, this must be in xf86 so we can parse/access options. >> Currently, it's hacked into xf86InitValuatorAxis because of that. >> >> It you're moving toward server-inited structs, I guess such a post-init >> point will come to live? > > well, there's already xf86ProcessCommonOptions and there is no reason > another one couldn't exist. Possibly one automatically called after a > successful PreInit(). Yes, I just checked back and that's exactly what I would need. Same for a static configuration of input transforms, I guess.
Are you already working on this? I want to make sure we get this fixed. I'd problby do something naive like the attached stuff, though a hook in dix might be preferable. (Just for communicating my idea of it, don't apply!) (And sorry for letting this rot in my inbox!) Cheers, Simon
>From ec32ed5b747934d9d066cd6b8019b2af45915f5c Mon Sep 17 00:00:00 2001 From: Simon Thum <[email protected]> Date: Sun, 18 Jul 2010 12:31:26 +0200 Subject: [PATCH] fix xf86 backend-specific input initialization Instead of shoving it in rather unrelated places, move acceleration init into xf86NewInputDevice. Caveat: It's not clear atm how relevant other callers of ActivteDevice (like OpenDevice) actually are. --- hw/xfree86/common/xf86Xinput.c | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index 76d2d00..684b3c7 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -108,6 +108,9 @@ EventListPtr xf86Events = NULL; +static int +xf86InputDeviceAfterDriverInit(DeviceIntPtr dev); + /** * Eval config and modify DeviceVelocityRec accordingly */ @@ -733,6 +736,19 @@ IgnoreInputClass(const IDevPtr idev, const InputAttributes *attrs) return ignore; } +/* + * Apply backend-specific initialization. Invoked after ActiveteDevice(), + * i.e. after the driver successfully completed DEVICE_INIT and the device + * is advertised. + * @param dev the device + * @return Success or an error code + */ +static int +xf86InputDeviceAfterDriverInit(DeviceIntPtr dev) { + ApplyAccelerationSettings(dev); + return Success; +} + /** * Create a new input device, activate and enable it. * @@ -807,6 +823,14 @@ xf86NewInputDevice(IDevPtr idev, DeviceIntPtr *pdev, BOOL enable) goto unwind; } + rval = xf86InputDeviceAfterDriverInit(dev); + if (rval != Success) + { + xf86Msg(X_ERROR, "Couldn't post-init device \"%s\"\n", idev->identifier); + RemoveDevice(dev, TRUE); + goto unwind; + } + /* Enable it if it's properly initialised and we're currently in the VT */ if (enable && dev->inited && dev->startup && xf86Screens[0]->vtSema) { @@ -1323,9 +1347,6 @@ xf86InitValuatorDefaults(DeviceIntPtr dev, int axnum) dev->valuator->axisVal[1] = screenInfo.screens[0]->height / 2; dev->last.valuators[1] = dev->valuator->axisVal[1]; } - - if(axnum == 0) /* to prevent double invocation */ - ApplyAccelerationSettings(dev); } -- 1.7.1
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
