From 3d3565c069558b9d1e8e0e86332415731b88b11d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 22 Jul 2010 10:38:58 +1000 Subject: Remove usage of XI86_POINTER_CAPABLE and XI86_KEYBOARD_CAPABLE. XI86_KEYBOARD_CAPABLE was write-only, both in the driver and the server. XI86_POINTER_CAPABLE was write-only in the server and can be emulated with has_abs_axes and has_rel_axes. Signed-off-by: Peter Hutterer --- src/evdev.c | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/src/evdev.c b/src/evdev.c index cd0fb6c..44ac14b 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1127,8 +1127,6 @@ EvdevAddKeyClass(DeviceIntPtr device) #endif - pInfo->flags |= XI86_KEYBOARD_CAPABLE; - return Success; } @@ -1209,22 +1207,6 @@ EvdevAddAbsClass(DeviceIntPtr device) if (!InitPtrFeedbackClassDeviceStruct(device, EvdevPtrCtrlProc)) return !Success; - if ((TestBit(ABS_X, pEvdev->abs_bitmask) && - TestBit(ABS_Y, pEvdev->abs_bitmask)) || - (TestBit(ABS_RX, pEvdev->abs_bitmask) && - TestBit(ABS_RY, pEvdev->abs_bitmask)) || - (TestBit(ABS_HAT0X, pEvdev->abs_bitmask) && - TestBit(ABS_HAT0Y, pEvdev->abs_bitmask)) || - (TestBit(ABS_HAT1X, pEvdev->abs_bitmask) && - TestBit(ABS_HAT1Y, pEvdev->abs_bitmask)) || - (TestBit(ABS_HAT2X, pEvdev->abs_bitmask) && - TestBit(ABS_HAT2Y, pEvdev->abs_bitmask)) || - (TestBit(ABS_HAT3X, pEvdev->abs_bitmask) && - TestBit(ABS_HAT3Y, pEvdev->abs_bitmask)) || - (TestBit(ABS_TILT_X, pEvdev->abs_bitmask) && - TestBit(ABS_TILT_Y, pEvdev->abs_bitmask))) - pInfo->flags |= XI86_POINTER_CAPABLE; - if (pEvdev->flags & EVDEV_TOUCHPAD) pEvdev->flags |= EVDEV_RELATIVE_MODE; else @@ -1328,8 +1310,6 @@ EvdevAddRelClass(DeviceIntPtr device) free(atoms); - pInfo->flags |= XI86_POINTER_CAPABLE; - return Success; } @@ -1947,8 +1927,7 @@ EvdevProbe(InputInfoPtr pInfo) } if (has_rel_axes || has_abs_axes || num_buttons) { - pInfo->flags |= XI86_POINTER_CAPABLE | XI86_SEND_DRAG_EVENTS | - XI86_CONFIGURED; + pInfo->flags |= XI86_SEND_DRAG_EVENTS | XI86_CONFIGURED; if (pEvdev->flags & EVDEV_TOUCHPAD) { xf86Msg(X_INFO, "%s: Configuring as touchpad\n", pInfo->name); pInfo->type_name = XI_TOUCHPAD; @@ -1966,15 +1945,14 @@ EvdevProbe(InputInfoPtr pInfo) if (has_keys) { xf86Msg(X_INFO, "%s: Configuring as keyboard\n", pInfo->name); - pInfo->flags |= XI86_KEYBOARD_CAPABLE | XI86_CONFIGURED; + pInfo->flags |= XI86_CONFIGURED; pInfo->type_name = XI_KEYBOARD; } if (has_scroll && (pInfo->flags & XI86_CONFIGURED) && - (pInfo->flags & XI86_POINTER_CAPABLE) == 0) + (has_rel_axes || has_abs_axes)) { xf86Msg(X_INFO, "%s: Adding scrollwheel support\n", pInfo->name); - pInfo->flags |= XI86_POINTER_CAPABLE; pEvdev->flags |= EVDEV_BUTTON_EVENTS; pEvdev->flags |= EVDEV_RELATIVE_EVENTS; } -- cgit v1.2.3 From 2f636402d882c775497e88c1f74477c4f6e9521d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 22 Jul 2010 10:40:01 +1000 Subject: Add ifdefs for pre ABI 12 support. The server doesn't provide these defines anymore, define them here for future use. To be purged whenever we drop support for the current server. Signed-off-by: Peter Hutterer --- src/evdev.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index 44ac14b..adda180 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -61,6 +61,12 @@ #endif +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 12 +/* removed from server, purge when dropping support for server 1.10 */ +#define XI86_CONFIGURED 0x02 +#define XI86_SEND_DRAG_EVENTS 0x08 +#endif + #ifndef MAXDEVICES #include /* for MAX_DEVICES */ #define MAXDEVICES MAX_DEVICES -- cgit v1.2.3 From d2c11d36a05e18936e39f7aa592c15b254aff1de Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 22 Jul 2010 10:51:12 +1000 Subject: Use pInfo->options instead of dev->commonOptions. No real change, preparation for new input API. Signed-off-by: Peter Hutterer --- src/evdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/evdev.c b/src/evdev.c index adda180..bcc72bd 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -2083,7 +2083,7 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) /* Grabbing the event device stops in-kernel event forwarding. In other words, it disables rfkill and the "Macintosh mouse button emulation". Note that this needs a server that sets the console to RAW mode. */ - pEvdev->grabDevice = xf86CheckBoolOption(dev->commonOptions, "GrabDevice", 0); + pEvdev->grabDevice = xf86CheckBoolOption(pInfo->options, "GrabDevice", 0); /* If grabDevice is set, ungrab immediately since we only want to grab * between DEVICE_ON and DEVICE_OFF. If we never get DEVICE_ON, don't -- cgit v1.2.3 From e0e4b7d89b20ab9997a2eeb17dc7381ecafa31e3 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 22 Jul 2010 10:51:54 +1000 Subject: Move private init down. No real change, preparation for new input API. Signed-off-by: Peter Hutterer --- src/evdev.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/evdev.c b/src/evdev.c index bcc72bd..e90eaed 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -2063,14 +2063,14 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) pInfo->conf_idev = dev; pInfo->private = NULL; + xf86CollectInputOptions(pInfo, evdevDefaults, NULL); + xf86ProcessCommonOptions(pInfo, pInfo->options); + if (!(pEvdev = calloc(sizeof(EvdevRec), 1))) goto error; pInfo->private = pEvdev; - xf86CollectInputOptions(pInfo, evdevDefaults, NULL); - xf86ProcessCommonOptions(pInfo, pInfo->options); - if (!EvdevOpenDevice(pInfo)) goto error; -- cgit v1.2.3 From 92e8dc49611398c8a9659b244645530cd26736fe Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 22 Jul 2010 10:57:02 +1000 Subject: Use the new input API (changed PreInit function prototype). Signed-off-by: Peter Hutterer --- src/evdev.c | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/src/evdev.c b/src/evdev.c index e90eaed..882ca7b 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -61,7 +61,7 @@ #endif -#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) > 12 +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12 /* removed from server, purge when dropping support for server 1.10 */ #define XI86_CONFIGURED 0x02 #define XI86_SEND_DRAG_EVENTS 0x08 @@ -88,7 +88,7 @@ #define MODEFLAG 8 #define COMPOSEFLAG 16 -static const char *evdevDefaults[] = { +static char *evdevDefaults[] = { "XkbRules", "evdev", "XkbModel", "evdev", "XkbLayout", "us", @@ -2035,11 +2035,13 @@ EvdevOpenDevice(InputInfoPtr pInfo) return TRUE; } +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12 +static int NewEvdevPreInit(InputDriverPtr, InputInfoPtr, int); + static InputInfoPtr EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) { InputInfoPtr pInfo; - EvdevPtr pEvdev; if (!(pInfo = xf86AllocateInput(drv, 0))) return NULL; @@ -2048,13 +2050,9 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) pInfo->fd = -1; pInfo->name = dev->identifier; pInfo->flags = 0; - pInfo->type_name = "UNKNOWN"; - pInfo->device_control = EvdevProc; - pInfo->read_input = EvdevReadInput; pInfo->history_size = 0; pInfo->control_proc = NULL; pInfo->close_proc = NULL; - pInfo->switch_mode = EvdevSwitchMode; pInfo->conversion_proc = NULL; pInfo->reverse_conversion_proc = NULL; pInfo->dev = NULL; @@ -2063,13 +2061,33 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) pInfo->conf_idev = dev; pInfo->private = NULL; - xf86CollectInputOptions(pInfo, evdevDefaults, NULL); + xf86CollectInputOptions(pInfo, (const char**)evdevDefaults, NULL); xf86ProcessCommonOptions(pInfo, pInfo->options); + if (NewEvdevPreInit(drv, pInfo, flags) == Success) + return pInfo; + + xf86DeleteInput(pInfo, 0); + return NULL; +} + +static int +NewEvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) +#else +static int +EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) +#endif +{ + EvdevPtr pEvdev; + if (!(pEvdev = calloc(sizeof(EvdevRec), 1))) goto error; pInfo->private = pEvdev; + pInfo->type_name = "UNKNOWN"; + pInfo->device_control = EvdevProc; + pInfo->read_input = EvdevReadInput; + pInfo->switch_mode = EvdevSwitchMode; if (!EvdevOpenDevice(pInfo)) goto error; @@ -2111,13 +2129,12 @@ EvdevPreInit(InputDriverPtr drv, IDevPtr dev, int flags) EvdevDragLockPreInit(pInfo); } - return pInfo; + return Success; error: if (pInfo->fd >= 0) close(pInfo->fd); - xf86DeleteInput(pInfo, 0); - return NULL; + return BadAlloc; } _X_EXPORT InputDriverRec EVDEV = { @@ -2127,7 +2144,10 @@ _X_EXPORT InputDriverRec EVDEV = { EvdevPreInit, NULL, NULL, - 0 + 0, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 12 + evdevDefaults +#endif }; static void -- cgit v1.2.3 From 4964c61f4b248e9eb16e8eadb5f5d0b6410b6b84 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 22 Jul 2010 11:32:08 +1000 Subject: Return BadMatch for already configured devices. PreInit can now return different error codes. Return BadAlloc for alloc failures and BadMatch if the device was already configured or the cache comparison/probe failed. Signed-off-by: Peter Hutterer --- src/evdev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/evdev.c b/src/evdev.c index 882ca7b..851ae8d 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -2079,6 +2079,7 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) #endif { EvdevPtr pEvdev; + int rc = BadAlloc; if (!(pEvdev = calloc(sizeof(EvdevRec), 1))) goto error; @@ -2110,6 +2111,7 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) { xf86Msg(X_WARNING, "%s: Device may already be configured.\n", pInfo->name); + rc = BadMatch; goto error; } @@ -2117,6 +2119,7 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) if (EvdevCacheCompare(pInfo, FALSE) || EvdevProbe(pInfo)) { + rc = BadMatch; goto error; } @@ -2134,7 +2137,7 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags) error: if (pInfo->fd >= 0) close(pInfo->fd); - return BadAlloc; + return rc; } _X_EXPORT InputDriverRec EVDEV = { -- cgit v1.2.3