[PATCH v2 2/3] config: Introduce InputAttributes in NewInputDeviceRequest
Dan Nicholson
dbn.lists at gmail.com
Fri Nov 27 14:01:00 PST 2009
In order to give NewInputDeviceRequest more information, a new
InputAttributes type is introduced. Currently, this collects the product
name, device path, and sets booleans for having keys and/or a pointer.
Only the HAL backend fills in the structure, though.
Signed-off-by: Dan Nicholson <dbn.lists at gmail.com>
---
Xi/stubs.c | 3 ++-
config/dbus.c | 2 +-
config/hal.c | 11 ++++++++++-
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 | 10 ++++++++++
8 files changed, 31 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..6a41b49 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,18 @@ 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 = path;
name = get_prop_string(hal_ctx, udi, "info.product");
if (!name)
name = xstrdup("(unnamed)");
+ else
+ attrs.name = name;
+
+ 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;
options = xcalloc(sizeof(*options), 1);
if (!options){
@@ -400,7 +409,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;
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..dfee12d 100644
--- a/include/input.h
+++ b/include/input.h
@@ -210,6 +210,15 @@ typedef struct _InputOption {
struct _InputOption *next;
} InputOption;
+typedef struct _InputAttributes {
+ char *name;
+ char *device;
+ int flags;
+} InputAttributes;
+
+#define ATTR_KEYBOARD (1<<0)
+#define ATTR_POINTER (1<<1)
+
/* 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 +523,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
More information about the xorg-devel
mailing list