Fix trackpads and graphics tablets being recognized as controllers on Linux/*BSD

This commit is contained in:
Hugo Locurcio 2024-06-19 16:22:57 +02:00
parent b75f0485ba
commit 724cdffc8c
No known key found for this signature in database
GPG Key ID: 39E8F8BE30B0A49C
2 changed files with 21 additions and 0 deletions

View File

@ -374,6 +374,12 @@ void JoypadLinux::open_joypad(const char *p_path) {
name = namebuf; name = namebuf;
} }
for (const String &word : name.to_lower().split(" ")) {
if (banned_words.has(word)) {
return;
}
}
if (ioctl(fd, EVIOCGID, &inpid) < 0) { if (ioctl(fd, EVIOCGID, &inpid) < 0) {
close(fd); close(fd);
return; return;

View File

@ -94,6 +94,21 @@ private:
Vector<String> attached_devices; Vector<String> attached_devices;
// List of lowercase words that will prevent the controller from being recognized if its name matches.
// This is done to prevent trackpads, graphics tablets and motherboard LED controllers from being
// recognized as controllers (and taking up controller ID slots as a result).
// Only whole words are matched within the controller name string. The match is case-insensitive.
const Vector<String> banned_words = {
"touchpad", // Matches e.g. "SynPS/2 Synaptics TouchPad", "Sony Interactive Entertainment DualSense Wireless Controller Touchpad"
"trackpad",
"clickpad",
"keyboard", // Matches e.g. "PG-90215 Keyboard", "Usb Keyboard Usb Keyboard Consumer Control"
"mouse", // Matches e.g. "Mouse passthrough"
"pen", // Matches e.g. "Wacom One by Wacom S Pen"
"finger", // Matches e.g. "Wacom HID 495F Finger"
"led", // Matches e.g. "ASRock LED Controller"
};
static void monitor_joypads_thread_func(void *p_user); static void monitor_joypads_thread_func(void *p_user);
void monitor_joypads_thread_run(); void monitor_joypads_thread_run();