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

Reply via email to