Browse Source

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

Hugo Locurcio 1 year ago
parent
commit
724cdffc8c
2 changed files with 21 additions and 0 deletions
  1. 6 0
      platform/linuxbsd/joypad_linux.cpp
  2. 15 0
      platform/linuxbsd/joypad_linux.h

+ 6 - 0
platform/linuxbsd/joypad_linux.cpp

@@ -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;

+ 15 - 0
platform/linuxbsd/joypad_linux.h

@@ -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();