mirror of
https://github.com/X11Libre/xf86-input-evdev.git
synced 2026-04-14 11:44:16 +00:00
Add option TypeName (#62831)
evdev tries to assign the right XI 1.x type-name based on various device capabilities. In some cases, that fails. e.g. the Mionix Naos 5000 mouse looks like a keyboard. And we assign a keyboard type in that case since there are plenty of keyboards that also advertise some axes or others. Add a new option TypeName to allow for system-wide configuration of such devices in a quirks file. This can also be used to address #55867 X.Org Bug 62831 <http://bugs.freedesktop.org/show_bug.cgi?id=62831> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
@@ -220,6 +220,12 @@ is mapped to the negative Y axis motion and button number
|
||||
.I N2
|
||||
is mapped to the positive Y axis motion. Default: "4 5". Property:
|
||||
"Evdev Wheel Emulation Axes".
|
||||
.TP 7
|
||||
.BI "Option \*qTypeName\*q \*q"type"\*q
|
||||
Specify the X Input 1.x type (see XListInputDevices(__libmansuffix__)).
|
||||
There is rarely a need to use this option, evdev will guess the device type
|
||||
based on the device's capabilities. This option is provided for devices that
|
||||
need quirks.
|
||||
|
||||
.SH SUPPORTED PROPERTIES
|
||||
The following properties are provided by the
|
||||
|
||||
13
src/evdev.c
13
src/evdev.c
@@ -2548,6 +2548,9 @@ EvdevUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||
/* Release string allocated in EvdevOpenDevice. */
|
||||
free(pEvdev->device);
|
||||
pEvdev->device = NULL;
|
||||
|
||||
free(pEvdev->type_name);
|
||||
pEvdev->type_name = NULL;
|
||||
}
|
||||
xf86DeleteInput(pInfo, flags);
|
||||
}
|
||||
@@ -2579,6 +2582,8 @@ EvdevAlloc(void)
|
||||
pEvdev->rel_axis_map[0] = 0;
|
||||
pEvdev->rel_axis_map[1] = 1;
|
||||
|
||||
pEvdev->type_name = NULL;
|
||||
|
||||
return pEvdev;
|
||||
}
|
||||
|
||||
@@ -2623,6 +2628,14 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* Overwrite type_name with custom-defined one (#62831).
|
||||
Note: pInfo->type_name isn't freed so we need to manually do this
|
||||
*/
|
||||
pEvdev->type_name = xf86SetStrOption(pInfo->options,
|
||||
"TypeName",
|
||||
pInfo->type_name);
|
||||
pInfo->type_name = pEvdev->type_name;
|
||||
|
||||
EvdevAddDevice(pInfo);
|
||||
|
||||
if (pEvdev->flags & EVDEV_BUTTON_EVENTS)
|
||||
|
||||
@@ -251,6 +251,8 @@ typedef struct {
|
||||
EventQueueRec queue[EVDEV_MAXQUEUE];
|
||||
|
||||
enum fkeymode fkeymode;
|
||||
|
||||
char *type_name;
|
||||
} EvdevRec, *EvdevPtr;
|
||||
|
||||
/* Event posting functions */
|
||||
|
||||
Reference in New Issue
Block a user