[PATCH] xfree86: store the InputAttributes in the input device.

Jamey Sharp jamey at minilop.net
Tue May 25 16:39:24 PDT 2010


Hi Peter! This commit introduced new warnings:

hw/xfree86/common/xf86Config.c:1272: warning: ‘Pointer$attrs’ may be
used uninitialized in this function
hw/xfree86/common/xf86Config.c:1119: note: ‘Pointer$attrs’ was declared here
hw/xfree86/common/xf86Config.c:1412: warning: ‘Keyboard$attrs’ may be
used uninitialized in this function
hw/xfree86/common/xf86Config.c:1119: note: ‘Keyboard$attrs’ was declared here

Jamey

On Tue, May 25, 2010 at 12:15 AM, Peter Hutterer
<peter.hutterer at who-t.net> wrote:
> InputAttributes largely decide which configuration values get merged from
> the xorg.conf.d snippets. While they are available in the config backend,
> they are not available for any other callers of NewInputDeviceRequest().
>
> Drivers implementing driver-side hotplugging do not have access to these
> attributes and cannot have xorg.conf.d snippets specific to dependent
> devices. For example, the following case cannot work right now:
>
> Section "InputClass"
>        MatchProduct "Wacom"
>        Option "PressCurve" "0 0 100 100"
>        ...
> EndSection
>
> Section "InputClass"
>        MatchProduct "Wacom"
>        MatchProduct "eraser"
>        Option "PressCurve" "10 10 50 50"
>        ...
> EndSection
>
> The second section is not triggered, as the wacom driver cannot supply the
> InputAttributes to NewInputDeviceRequest().
>
> Add the attributes to the IDevRec and merge them into the InputInfoRec to
> make them accessible in the driver. This changes the ABI for input drivers.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>  hw/xfree86/common/xf86Helper.c |    2 ++
>  hw/xfree86/common/xf86Option.c |    4 ++++
>  hw/xfree86/common/xf86Xinput.c |    3 ++-
>  hw/xfree86/common/xf86Xinput.h |    1 +
>  hw/xfree86/common/xf86str.h    |    1 +
>  5 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
> index 9ec5941..d9d5e7c 100644
> --- a/hw/xfree86/common/xf86Helper.c
> +++ b/hw/xfree86/common/xf86Helper.c
> @@ -334,6 +334,8 @@ xf86DeleteInput(InputInfoPtr pInp, int flags)
>     if (pInp->private)
>        free(pInp->private);
>
> +    FreeInputAttributes(pInp->attrs);
> +
>     /* Remove the entry from the list. */
>     if (pInp == xf86InputDevs)
>        xf86InputDevs = pInp->next;
> diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
> index 8be893c..61d0dcc 100644
> --- a/hw/xfree86/common/xf86Option.c
> +++ b/hw/xfree86/common/xf86Option.c
> @@ -164,6 +164,10 @@ xf86CollectInputOptions(InputInfoPtr pInfo, const char **defaultOpts,
>        else
>            pInfo->options = tmp;
>     }
> +
> +    if (pInfo->conf_idev && pInfo->conf_idev->attrs) {
> +        pInfo->attrs = pInfo->conf_idev->attrs;
> +    }
>  }
>
>  /* Created for new XInput stuff -- essentially extensions to the parser        */
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index b0f1b9a..b30ebbb 100644
> --- a/hw/xfree86/common/xf86Xinput.c
> +++ b/hw/xfree86/common/xf86Xinput.c
> @@ -622,7 +622,6 @@ MergeInputClasses(IDevPtr idev, InputAttributes *attrs)
>         mergedopts = xf86ReplaceStrOption(mergedopts, "driver", idev->driver);
>     }
>     idev->commonOptions = xf86optionListMerge(idev->commonOptions, mergedopts);
> -
>     return Success;
>  }
>
> @@ -822,6 +821,8 @@ NewInputDeviceRequest (InputOption *options, InputAttributes *attrs,
>         rval = MergeInputClasses(idev, attrs);
>         if (rval != Success)
>             goto unwind;
> +
> +        idev->attrs = DuplicateInputAttributes(attrs);
>     }
>
>     if (!idev->driver || !idev->identifier) {
> diff --git a/hw/xfree86/common/xf86Xinput.h b/hw/xfree86/common/xf86Xinput.h
> index aa9e9d5..20a3f1b 100644
> --- a/hw/xfree86/common/xf86Xinput.h
> +++ b/hw/xfree86/common/xf86Xinput.h
> @@ -148,6 +148,7 @@ typedef struct _LocalDeviceRec {
>     pointer                module;
>     pointer                options;
>     unsigned int            history_size;
> +    InputAttributes         *attrs;
>  } LocalDeviceRec, *LocalDevicePtr, InputInfoRec, *InputInfoPtr;
>
>  typedef struct _DeviceAssocRec
> diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
> index de1f1b6..c06a91e 100644
> --- a/hw/xfree86/common/xf86str.h
> +++ b/hw/xfree86/common/xf86str.h
> @@ -408,6 +408,7 @@ typedef struct {
>    char *                      driver;
>    pointer                     commonOptions;
>    pointer                     extraOptions;
> +   InputAttributes              *attrs;
>  } IDevRec, *IDevPtr;
>
>  typedef struct {
> --
> 1.7.0.1
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>


More information about the xorg-devel mailing list