On Mon, Dec 14, 2009 at 09:09:01PM -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 <[email protected]> > --- > Xi/stubs.c | 3 ++- > config/dbus.c | 2 +- > config/hal.c | 28 +++++++++++++++++++++++++++- > hw/dmx/dmxinput.c | 3 ++- > hw/kdrive/src/kinput.c | 3 ++- > hw/xfree86/common/xf86Xinput.c | 3 ++- > hw/xquartz/darwinXinput.c | 3 ++- > include/input.h | 15 +++++++++++++++ > 8 files changed, 53 insertions(+), 7 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..79549fe 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,13 @@ unwind: > xfree(tmpo); > } > > + if (attrs.product) > + xfree(attrs.product); > + if (attrs.vendor) > + xfree(attrs.vendor); > + if (attrs.device) > + xfree(attrs.device); > + as ajax said, we can skip these checks. > 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/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..8ad50cb 100644 > --- a/include/input.h > +++ b/include/input.h > @@ -210,6 +210,20 @@ typedef struct _InputOption { > struct _InputOption *next; > } InputOption; > > +typedef struct _InputAttributes { > + char *product; > + char *vendor; > + char *device; > + int flags; unsigned long maybe? i wouldn't be suprised if a whole bunch of these flags are added in the future. > +} 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 +528,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 this patch needs to bump the ABI_XINPUT_VERSION so we can adjust the input drivers (well, wacom). other than those minor changes, the patch is fine so IMO the next one should be the final. Cheers, Peter _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
