[PATCH v4 2/3] config: Introduce InputAttributes in NewInputDeviceRequest

Dan Nicholson dbn.lists at gmail.com
Mon Dec 21 23:14:45 PST 2009


On Mon, Dec 21, 2009 at 10:59 PM, Peter Hutterer
<peter.hutterer at who-t.net> wrote:
> On Mon, Dec 21, 2009 at 12:29:02PM -0800, Dan Nicholson wrote:
>> In order to give NewInputDeviceRequest more information, a new
>> InputAttributes type is introduced. Currently, this collects the product
>> and vendor name, device path, and sets booleans for attributes such as
>> having keys and/or a pointer. Only the HAL backend fills in the
>> attributes, though.
>>
>> Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
>> ---
>>  Xi/stubs.c                     |    3 ++-
>>  config/dbus.c                  |    2 +-
>>  config/hal.c                   |   25 ++++++++++++++++++++++++-
>>  hw/dmx/dmxinput.c              |    3 ++-
>>  hw/kdrive/src/kinput.c         |    3 ++-
>>  hw/xfree86/common/xf86Module.h |    2 +-
>>  hw/xfree86/common/xf86Xinput.c |    3 ++-
>>  hw/xquartz/darwinXinput.c      |    3 ++-
>>  include/input.h                |   16 ++++++++++++++++
>>  9 files changed, 52 insertions(+), 8 deletions(-)
>>
>> diff --git a/Xi/stubs.c b/Xi/stubs.c
>> index 400e937..04ba976 100644
>> --- a/Xi/stubs.c
>> +++ b/Xi/stubs.c
>> @@ -227,7 +227,8 @@ ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev,
>>   *
>>   */
>>  int
>> -NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
>> +NewInputDeviceRequest(InputOption *options, InputAttributes *attrs,
>> +                      DeviceIntPtr *pdev)
>>  {
>>      return BadValue;
>>  }
>> diff --git a/config/dbus.c b/config/dbus.c
>> index 37462ac..86d9d28 100644
>> --- a/config/dbus.c
>> +++ b/config/dbus.c
>> @@ -147,7 +147,7 @@ add_device(DBusMessage *message, DBusMessage *reply, DBusError *error)
>>          dbus_message_iter_next(&iter);
>>      }
>>
>> -    ret = NewInputDeviceRequest(options, &dev);
>> +    ret = NewInputDeviceRequest(options, NULL, &dev);
>>      if (ret != Success) {
>>          DebugF("[config/dbus] NewInputDeviceRequest failed\n");
>>          goto unwind;
>> diff --git a/config/hal.c b/config/hal.c
>> index 28f55a0..6bebbdf 100644
>> --- a/config/hal.c
>> +++ b/config/hal.c
>> @@ -191,6 +191,7 @@ device_added(LibHalContext *hal_ctx, const char *udi)
>>  {
>>      char *path = NULL, *driver = NULL, *name = NULL, *config_info = NULL;
>>      InputOption *options = NULL, *tmpo = NULL;
>> +    InputAttributes attrs = {0};
>>      DeviceIntPtr dev = NULL;
>>      DBusError error;
>>      struct xkb_options xkb_opts = {0};
>> @@ -215,10 +216,28 @@ device_added(LibHalContext *hal_ctx, const char *udi)
>>          LogMessage(X_WARNING,"config/hal: no driver or path specified for %s\n", udi);
>>          goto unwind;
>>      }
>> +    attrs.device = xstrdup(path);
>>
>>      name = get_prop_string(hal_ctx, udi, "info.product");
>>      if (!name)
>>          name = xstrdup("(unnamed)");
>> +    else
>> +        attrs.product = xstrdup(name);
>> +
>> +    attrs.vendor = get_prop_string(hal_ctx, udi, "info.vendor");
>> +
>> +    if (libhal_device_query_capability(hal_ctx, udi, "input.keys", NULL))
>> +        attrs.flags |= ATTR_KEYBOARD;
>> +    if (libhal_device_query_capability(hal_ctx, udi, "input.mouse", NULL))
>> +        attrs.flags |= ATTR_POINTER;
>> +    if (libhal_device_query_capability(hal_ctx, udi, "input.joystick", NULL))
>> +        attrs.flags |= ATTR_JOYSTICK;
>> +    if (libhal_device_query_capability(hal_ctx, udi, "input.tablet", NULL))
>> +        attrs.flags |= ATTR_TABLET;
>> +    if (libhal_device_query_capability(hal_ctx, udi, "input.touchpad", NULL))
>> +        attrs.flags |= ATTR_TOUCHPAD;
>> +    if (libhal_device_query_capability(hal_ctx, udi, "input.touchscreen", NULL))
>> +        attrs.flags |= ATTR_TOUCHSCREEN;
>>
>>      options = xcalloc(sizeof(*options), 1);
>>      if (!options){
>> @@ -400,7 +419,7 @@ device_added(LibHalContext *hal_ctx, const char *udi)
>>
>>      /* this isn't an error, but how else do you output something that the user can see? */
>>      LogMessage(X_INFO, "config/hal: Adding input device %s\n", name);
>> -    if ((rc = NewInputDeviceRequest(options, &dev)) != Success) {
>> +    if ((rc = NewInputDeviceRequest(options, &attrs, &dev)) != Success) {
>>          LogMessage(X_ERROR, "config/hal: NewInputDeviceRequest failed (%d)\n", rc);
>>          dev = NULL;
>>          goto unwind;
>> @@ -430,6 +449,10 @@ unwind:
>>          xfree(tmpo);
>>      }
>>
>> +    xfree(attrs.product);
>> +    xfree(attrs.vendor);
>> +    xfree(attrs.device);
>> +
>>      if (xkb_opts.layout)
>>          xfree(xkb_opts.layout);
>>      if (xkb_opts.rules)
>> diff --git a/hw/dmx/dmxinput.c b/hw/dmx/dmxinput.c
>> index d9118b6..c099349 100644
>> --- a/hw/dmx/dmxinput.c
>> +++ b/hw/dmx/dmxinput.c
>> @@ -103,7 +103,8 @@ void dmxUpdateWindowInfo(DMXUpdateType type, WindowPtr pWindow)
>>  }
>>
>>  int
>> -NewInputDeviceRequest (InputOption *options, DeviceIntPtr *pdev)
>> +NewInputDeviceRequest (InputOption *options, InputAttributes *attrs,
>> +                       DeviceIntPtr *pdev)
>>  {
>>      return BadRequest;
>>  }
>> diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
>> index 65fc75a..c084591 100644
>> --- a/hw/kdrive/src/kinput.c
>> +++ b/hw/kdrive/src/kinput.c
>> @@ -2249,7 +2249,8 @@ ChangeDeviceControl(register ClientPtr client, DeviceIntPtr pDev,
>>  }
>>
>>  int
>> -NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
>> +NewInputDeviceRequest(InputOption *options, InputAttributes *attrs,
>> +                      DeviceIntPtr *pdev)
>>  {
>>      InputOption *option = NULL;
>>      KdPointerInfo *pi = NULL;
>> diff --git a/hw/xfree86/common/xf86Module.h b/hw/xfree86/common/xf86Module.h
>> index 28da22b..154779d 100644
>> --- a/hw/xfree86/common/xf86Module.h
>> +++ b/hw/xfree86/common/xf86Module.h
>> @@ -83,7 +83,7 @@ typedef enum {
>>   */
>>  #define ABI_ANSIC_VERSION    SET_ABI_VERSION(0, 4)
>>  #define ABI_VIDEODRV_VERSION SET_ABI_VERSION(6, 0)
>> -#define ABI_XINPUT_VERSION   SET_ABI_VERSION(7, 0)
>> +#define ABI_XINPUT_VERSION   SET_ABI_VERSION(8, 0)
>>  #define ABI_EXTENSION_VERSION        SET_ABI_VERSION(2, 0)
>>  #define ABI_FONT_VERSION     SET_ABI_VERSION(0, 6)
>>
>> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
>> index f637cfe..11b7315 100644
>> --- a/hw/xfree86/common/xf86Xinput.c
>> +++ b/hw/xfree86/common/xf86Xinput.c
>> @@ -568,7 +568,8 @@ unwind:
>>  }
>>
>>  int
>> -NewInputDeviceRequest (InputOption *options, DeviceIntPtr *pdev)
>> +NewInputDeviceRequest (InputOption *options, InputAttributes *attrs,
>> +                       DeviceIntPtr *pdev)
>>  {
>>      IDevRec *idev = NULL;
>>      InputOption *option = NULL;
>> diff --git a/hw/xquartz/darwinXinput.c b/hw/xquartz/darwinXinput.c
>> index 8af9fc7..43aea61 100644
>> --- a/hw/xquartz/darwinXinput.c
>> +++ b/hw/xquartz/darwinXinput.c
>> @@ -230,7 +230,8 @@ ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev,
>>   *
>>   */
>>  int
>> -NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
>> +NewInputDeviceRequest(InputOption *options, InputAttributes *attrs,
>> +                      DeviceIntPtr *pdev)
>>  {
>>    DEBUG_LOG("NewInputDeviceRequest(%p, %p)\n", options, pdev);
>>    return BadValue;
>> diff --git a/include/input.h b/include/input.h
>> index afcc006..7a6242d 100644
>> --- a/include/input.h
>> +++ b/include/input.h
>> @@ -52,6 +52,7 @@ SOFTWARE.
>>  #include "screenint.h"
>>  #include <X11/Xmd.h>
>>  #include <X11/Xproto.h>
>> +#include <stdint.h>
>>  #include "window.h"     /* for WindowPtr */
>>  #include "xkbrules.h"
>>  #include "events.h"
>> @@ -210,6 +211,20 @@ typedef struct _InputOption {
>>      struct _InputOption *next;
>>  } InputOption;
>>
>> +typedef struct _InputAttributes {
>> +    char                *product;
>> +    char                *vendor;
>> +    char                *device;
>> +    uint32_t            flags;
>> +} InputAttributes;
>> +
>> +#define ATTR_KEYBOARD (1<<0)
>> +#define ATTR_POINTER (1<<1)
>> +#define ATTR_JOYSTICK (1<<2)
>> +#define ATTR_TABLET (1<<3)
>> +#define ATTR_TOUCHPAD (1<<4)
>> +#define ATTR_TOUCHSCREEN (1<<5)
>> +
>>  /* Key has been run through all input processing and events sent to clients. */
>>  #define KEY_PROCESSED 1
>>  /* Key has not been fully processed, no events have been sent. */
>> @@ -514,6 +529,7 @@ void FixUpEventFromWindow(DeviceIntPtr pDev,
>>  /* Implemented by the DDX. */
>>  extern _X_EXPORT int NewInputDeviceRequest(
>>      InputOption *options,
>> +    InputAttributes *attrs,
>>      DeviceIntPtr *dev);
>>  extern  _X_EXPORT void DeleteInputDeviceRequest(
>>      DeviceIntPtr dev);
>> --
>> 1.6.2.5
>
> Alan and Keith bumped the ABI to 8 with the resource patches, so pending on
> Keith's answer to the email this needs to get bumped to 9 before you send
> the pull request.
>
> Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

OK. I'm on a slightly old master and didn't feel like rebasing again.
:) I'll keep my eye on that conversation and send a pull request when
it settles out.

--
Dan


More information about the xorg-devel mailing list