From 1cb568c0a6c18ec62ebb89ca21a22a77c78cad24 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 19 Jul 2006 19:41:54 -0400 Subject: prune device list on DEVICE_CLOSE Remove a device from the device list when we get DEVICE_CLOSE. --- src/evdev.c | 5 +++++ src/evdev.h | 1 + src/evdev_brain.c | 17 +++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/evdev.c b/src/evdev.c index f128a81..329a874 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -209,6 +209,9 @@ EvdevProc(DeviceIntPtr device, int what) EvdevKeyOff (device); } + if (what == DEVICE_CLOSE) + evdevRemoveDevice(pEvdev); + device->public.on = FALSE; break; } @@ -232,10 +235,12 @@ EvdevSwitchMode (ClientPtr client, DeviceIntPtr device, int mode) else return !Success; break; +#if 0 case SendCoreEvents: case DontSendCoreEvents: xf86XInputSetSendCoreEvents (pInfo, (mode == SendCoreEvents)); break; +#endif default: return !Success; } diff --git a/src/evdev.h b/src/evdev.h index a399571..884453a 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -243,6 +243,7 @@ int evdevGetFDForDevice (evdevDevicePtr driver); Bool evdevStart (InputDriverPtr drv); Bool evdevNewDriver (evdevDriverPtr driver); Bool evdevGetBits (int fd, evdevBitsPtr bits); +void evdevRemoveDevice (evdevDevicePtr device); int EvdevBtnInit (DeviceIntPtr device); int EvdevBtnOn (DeviceIntPtr device); diff --git a/src/evdev_brain.c b/src/evdev_brain.c index 6365577..246666f 100644 --- a/src/evdev_brain.c +++ b/src/evdev_brain.c @@ -462,6 +462,23 @@ evdevNewDriver (evdevDriverPtr driver) return TRUE; } +void +evdevRemoveDevice (evdevDevicePtr pEvdev) +{ + evdevDriverPtr driver; + evdevDevicePtr *device; + + for (driver = evdev_drivers; driver; driver = driver->next) { + for (device = &driver->devices; *device; device = &(*device)->next) { + if (*device == pEvdev) { + *device = pEvdev->next; + pEvdev->next = NULL; + return; + } + } + } +} + Bool evdevGetBits (int fd, evdevBitsPtr bits) { -- cgit v1.2.3 From 7defeb0aefb216d203b495a53a6d1d505f7dece4 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 19 Jul 2006 19:43:08 -0400 Subject: pass number of axes to InitValuatorClassDeviceStruct This is now required with the input-hotplug server. --- src/evdev_axes.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/evdev_axes.c b/src/evdev_axes.c index 0d9b5a7..c5eda70 100644 --- a/src/evdev_axes.c +++ b/src/evdev_axes.c @@ -525,7 +525,8 @@ EvdevAxesInit (DeviceIntPtr device) if (!InitValuatorClassDeviceStruct(device, axes, miPointerGetMotionEvents, - miPointerGetMotionBufferSize(), 0)) + miPointerGetMotionBufferSize(), 0, + axes)) return !Success; for (i = 0; i < axes; i++) { -- cgit v1.2.3 From 7b91f9277afb4bd9e557f9600bd92c68dd2435c9 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 19 Jul 2006 19:45:27 -0400 Subject: pass maxval correctly to xf86InitValuatorAxisDeviceStruct Pass a maxval of -1 (i.e., fill this in appropriately), rather than 0 (0). --- src/evdev_axes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/evdev_axes.c b/src/evdev_axes.c index c5eda70..b2b18e1 100644 --- a/src/evdev_axes.c +++ b/src/evdev_axes.c @@ -530,7 +530,7 @@ EvdevAxesInit (DeviceIntPtr device) return !Success; for (i = 0; i < axes; i++) { - xf86InitValuatorAxisStruct(device, i, 0, 0, 0, 0, 1); + xf86InitValuatorAxisStruct(device, i, 0, -1, 0, 0, 1); xf86InitValuatorDefaults(device, i); } -- cgit v1.2.3 From e4681504487151553894ae0d513b9e833d2597d1 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Fri, 21 Jul 2006 14:38:12 -0400 Subject: fix InitValuatorClassDeviceStruct call I don't know how the last parameter got there. Sorry. --- src/evdev_axes.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/evdev_axes.c b/src/evdev_axes.c index b2b18e1..4650b5f 100644 --- a/src/evdev_axes.c +++ b/src/evdev_axes.c @@ -525,8 +525,7 @@ EvdevAxesInit (DeviceIntPtr device) if (!InitValuatorClassDeviceStruct(device, axes, miPointerGetMotionEvents, - miPointerGetMotionBufferSize(), 0, - axes)) + miPointerGetMotionBufferSize(), 0)) return !Success; for (i = 0; i < axes; i++) { -- cgit v1.2.3 From 77cbbc20b60fd564f8add39bfb840c85d5cad51d Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Sun, 8 Oct 2006 16:14:12 +0300 Subject: key: remove usage of OS keyboard layer for bell Right now, bell is a no-op. --- src/evdev_key.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/evdev_key.c b/src/evdev_key.c index 8917c3b..577ae73 100644 --- a/src/evdev_key.c +++ b/src/evdev_key.c @@ -240,8 +240,11 @@ static KeySym map[] = { static void EvdevKbdBell (int percent, DeviceIntPtr device, pointer ctrl, int unused) { +/* OS keyboard layer has been removed. */ +#if 0 xf86SoundKbdBell(percent, ((KeybdCtrl*) ctrl)->bell_pitch, ((KeybdCtrl*) ctrl)->bell_duration); +#endif } static void -- cgit v1.2.3 From ec09e0d55dd14164cc46a68a71d439cc550df063 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Sun, 15 Oct 2006 19:37:46 +0300 Subject: brain: call xf86DeleteInput when removing device Call xf86DeleteInput from evdevRemoveDevice, so it also gets removed from xf86InputDevs in the DDX. --- src/evdev_brain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/evdev_brain.c b/src/evdev_brain.c index 246666f..7e65935 100644 --- a/src/evdev_brain.c +++ b/src/evdev_brain.c @@ -472,6 +472,7 @@ evdevRemoveDevice (evdevDevicePtr pEvdev) for (device = &driver->devices; *device; device = &(*device)->next) { if (*device == pEvdev) { *device = pEvdev->next; + xf86DeleteInput(pEvdev->pInfo, 0); pEvdev->next = NULL; return; } -- cgit v1.2.3 From 036b457c1b3f7d2d174da890cb8598d907181f8e Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 25 Oct 2006 02:22:46 +0300 Subject: support new DIX motion history API Use the DIX motion history if we have ABI version 1 or higher. --- src/evdev.c | 2 ++ src/evdev_axes.c | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/evdev.c b/src/evdev.c index f2d61f6..1bcaef8 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -273,7 +273,9 @@ EvdevNew(evdevDriverPtr driver, evdevDevicePtr device) pInfo->device_control = EvdevProc; pInfo->read_input = EvdevReadInput; pInfo->switch_mode = EvdevSwitchMode; +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0 pInfo->motion_history_proc = xf86GetMotionEvents; +#endif pInfo->conf_idev = driver->dev; pInfo->private = device; diff --git a/src/evdev_axes.c b/src/evdev_axes.c index 6879ab1..9d2ef20 100644 --- a/src/evdev_axes.c +++ b/src/evdev_axes.c @@ -672,8 +672,14 @@ EvdevAxesInit (DeviceIntPtr device) return Success; if (!InitValuatorClassDeviceStruct(device, axes, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 1 + GetMotionHistory, + GetMotionHistorySize(), +#else miPointerGetMotionEvents, - miPointerGetMotionBufferSize(), 0)) + miPointerGetMotionBufferSize(), +#endif + 0)) return !Success; for (i = 0; i < axes; i++) { @@ -684,7 +690,9 @@ EvdevAxesInit (DeviceIntPtr device) if (!InitPtrFeedbackClassDeviceStruct(device, EvdevPtrCtrlProc)) return !Success; +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 0 xf86MotionHistoryAllocate (pInfo); +#endif return Success; } -- cgit v1.2.3 From ef01c2ef65fa64cb213dc3adfa30c75635d1fe03 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Thu, 2 Nov 2006 03:41:48 +0200 Subject: key: use os bell-ringing function Use the OS bell-ringing function to ding the bell. --- src/evdev_key.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/evdev_key.c b/src/evdev_key.c index 577ae73..f840d1a 100644 --- a/src/evdev_key.c +++ b/src/evdev_key.c @@ -238,13 +238,11 @@ static KeySym map[] = { * So use the system bell for now. */ static void -EvdevKbdBell (int percent, DeviceIntPtr device, pointer ctrl, int unused) +EvdevKbdBell (int percent, DeviceIntPtr device, pointer arg, int unused) { -/* OS keyboard layer has been removed. */ -#if 0 - xf86SoundKbdBell(percent, ((KeybdCtrl*) ctrl)->bell_pitch, - ((KeybdCtrl*) ctrl)->bell_duration); -#endif + KeybdCtrl *ctrl = arg; + + xf86OSRingBell(percent, ctrl->bell_pitch, ctrl->bell_duration); } static void -- cgit v1.2.3