1505 Commits

Author SHA1 Message Date
Craig Carnell e222665eb0 mingw: lower case windows includes 2026-07-08 09:18:29 +01:00
JosJuice 64a73e5636 Android: Fix mixup between Vibrator id and index
This fixes https://bugs.dolphin-emu.org/issues/14076. The issue report
more or less already says it all, but to provide a shorter summary:
We were fetching a list of vibrator IDs, but instead of passing the
vibrator ID to the vibrator manager, we passed the index of the ID in
the list. This happened to work fine on many devices, including all
devices that use DolphinVibratorManagerCompat, due to the only Vibrator
having both an index and ID of 0. But on some devices, it failed due to
the ID of the Vibrator being 1.

This fix makes us correctly pass the ID to the vibrator manager. We
still use indices in controller INI files, both for compatibility with
the controller mappings shipped with Dolphin (which use index 0) and for
backwards compatibility with older controller INI files.
2026-06-26 22:10:16 +02:00
Vlad Firoiu 20718de37e Unconditionally lock in ControllerInterface::UpdateInput. 2026-05-06 15:57:03 -04:00
Dentomologist ac78e52cf9 GCAdapter: Fix data races
Make `s_is_adapter_wanted` and the elements of `s_config_rumble_enabled`
atomic.

The CPU thread reads `s_is_adapter_wanted` and `s_config_rumble_enabled`
in `Output`, while the host thread writes to them in `RefreshConfig`.

The simplest way to trigger this race is to close the `Settings` window
while playing a game with the adapter active.
2026-04-25 11:16:10 -07:00
Dentomologist a94854309b Merge pull request #14608 from JosJuice/gcadapter-auto-start
GCAdapter: Automatically start and stop thread
2026-04-24 19:51:51 -07:00
JosJuice cc01a60347 GCAdapter: Automatically start and stop thread
This keeps the logic encapsulated inside GCAdapter.cpp so callers don't
have to think about it.
2026-04-18 19:40:25 +02:00
Martino Fontana 95dec13203 Improve usage of std::move and const references parameters
Accomplished using `run-clang-tidy` with `performance-move-const-arg,performance-unnecessary-value-param,modernize-pass-by-value`.

Changed arguments to const references, removed them where inappropriate (e.g. sink parameters). Same with std::move.

Manually reviewed each change to make sure that it makes sense, and do something more appropriate if possible.
2026-04-17 12:39:46 +02:00
Jordan Woyak f074cdb08b Merge pull request #14237 from JulienBernard3383279/gcc-adapter-hotswap
GC adapter fixes (hotplugging, claim retries, Dolphin shutdown)
2026-03-18 16:56:30 -05:00
TellowKrinkle 80762e0575 DSU: Don't crash on bad hostname 2026-03-01 00:08:08 -06:00
Julien Bernard 0e8db4fa22 Send neutral stick positions when disconnected rather than down-left 2026-02-25 23:06:50 +01:00
Julien Bernard afc2920a5f Gcc adapter fixes (hotplugging, claim retries, shutdown, bad yields) 2026-02-25 22:55:48 +01:00
JMC47 981b7df420 Merge pull request #14335 from TixoRebel/joycon-config
Core: Add SDL Hints settings
2026-02-20 02:44:52 -05:00
Andrew Strauss 61c36b0cc8 Add new window to configure SDL hints and store them in the main ini file
Signed-off-by: Andrew Strauss <astrauss11@gmail.com>
2026-02-20 02:05:35 -05:00
crediar 2c62214875 Added Triforce support 2026-02-15 20:14:14 -06:00
JosJuice bd92388d2f Android: Rework input device hotplug
Previously, when an input device was connected or disconnected, we would
recreate all devices. This commit makes it so we only touch the relevant
device instead. This matters because recreating a device causes us to
drop all held buttons for that device. Due to Android only delivering
inputs as events, we're unable to poll for currently held buttons when
recreating a device.

This recently became a problem for users of Ayn devices due to a
firmware update. Every now and then, something about the display
viewports changes, triggering an update to an input device that I assume
is a touch input device. This input device isn't something users
normally map in Dolphin's controller settings, but it changing was
causing Dolphin to drop all held buttons for the device's built-in
gamepad as well as any other connected gamepads.
2026-02-08 10:38:43 +01:00
Dentomologist 8f662f7be3 InputConfig: Remove unused local variables
Remove unused vector `controller_names` from `LoadConfig` and
`SaveConfig`. The vector has names added to it but they're never used.

Prior to d03f9032c1 these vectors were
passed to `DynamicInputTextureManager::GenerateTextures`, but that
commit removed those calls.
2026-01-26 11:36:42 -08:00
Martino Fontana a14c88ba67 Remove unused imports
Yellow squiggly lines begone!
Done automatically on .cpp files through `run-clang-tidy`, with manual corrections to the mistakes.
If an import is directly used, but is technically unnecessary since it's recursively imported by something else, it is *not* removed.
The tool doesn't touch .h files, so I did some of them by hand while fixing errors due to old recursive imports.
Not everything is removed, but the cleanup should be substantial enough.
Because this done on Linux, code that isn't used on it is mostly untouched.
(Hopefully no open PR is depending on these imports...)
2026-01-25 16:12:15 +01:00
Sintendo 60ca0626df Remove VectorToJStringArray 2026-01-24 16:50:10 +01:00
Sintendo 972ec95cb3 Clean includes 2026-01-24 16:50:10 +01:00
Sintendo f2e1c71803 Common/FileSearch: Refactor DoFileSearch 2026-01-24 16:50:10 +01:00
JMC47 035bcffc63 Merge pull request #14289 from Sintendo/typos
Fix various typos and spelling mistakes
2026-01-17 19:10:50 -05:00
Sintendo 1e0473e44f Fix various typos and spelling mistakes 2026-01-17 20:11:38 +01:00
Joshua Vandaële 6cc121aceb DInputKeyboardMouse: Always report all possible buttons 2026-01-07 01:08:34 +01:00
JMC47 07d071a0b8 Merge pull request #14158 from jordan-woyak/gcadapter-poll-rate-display
GCAdapter: Calculate poll rate for display in UI.
2025-12-22 13:35:24 -05:00
Jordan Woyak 21eb43c16e ControllerInterface: Turn off SDL's GameCube controller adapter handling when Dolphin is configured to use the adapter. 2025-12-09 16:51:41 -06:00
Joshua Vandaële 5a6dc310c0 DITConfiguration: Prevent a crash if images fail to load
Recently came across a strange issue where Dolphin would hard crash in most games with this error:

```sh
/usr/include/c++/15.2.1/optional:1165: constexpr const _Tp* std::optional<_Tp>::operator->() const [with _Tp = InputCommon::ImagePixelData]: Assertion 'this->_M_is_engaged()' failed.
```

The culprit turned out to be accessing `host_key_image` which is an `std::optional` thay may return `std::nullopt`. I'm not sure why this issue started occuring for me since I've had no issue with my Dynamic Input Textures in the past? But this fixes a crash if the image fails to load.
2025-11-29 23:54:48 +01:00
Jordan Woyak f9a5051bae GCAdapter: Calculate poll rate for display in UI. It's currently updated every 50 reads. 2025-11-23 02:06:39 -06:00
Jordan Woyak da6c65bf3b Common: Remove the string parameters from the HookableEvent interface. 2025-11-06 22:34:40 -06:00
Jordan Woyak ca6d8e1f0b InputCommon: Make ControllerInterface RegisterDevicesChangedCallback use Common::HookableEvent. 2025-11-05 17:12:56 -06:00
JMC47 efa9245565 Merge pull request #13963 from jordan-woyak/point-passthru-needs-bound-inputs
WiimoteEmu: Require IRPassthrough has any bound inputs to operate.
2025-10-09 14:05:16 -04:00
Jordan Woyak 572459bc25 WiimoteEmu: Require IRPassthrough has any bound inputs to operate. Users get confused and mistakenly enable it. 2025-10-04 14:34:49 -05:00
Admiral H. Curtiss c9c57f8ba4 Merge pull request #13752 from jordan-woyak/xlib-duplicate-key-names
ControllerInterface/Xlib: Combine keycodes with the same name to fix non-working inputs.
2025-10-04 17:18:16 +02:00
Jordan Woyak c11132d2a6 SDL: Disable DirectInput handling to work around hangs with the "8BitDo Ultimate 2" controller. 2025-09-30 03:13:52 -05:00
Jordan Woyak 956f6cfbd2 SDL: Name the hotplug thread. 2025-09-30 03:04:58 -05:00
JMC47 e1c7734ee4 Merge pull request #13260 from JosJuice/android-gcadapter-hotplug-callback
Android: Detect GCAdapter hotplug using BroadcastReceiver
2025-09-28 14:03:50 -04:00
JMC47 3b4fd0bc4f Merge pull request #13961 from Sam-Belliveau/sdl-gamepad-profile
Add SDL Gamepad Profile
2025-09-26 17:27:58 -04:00
Sam Belliveau 52071f3943 Prevent profiles with no device specification from resetting device 2025-09-24 21:38:02 -04:00
Jordan Woyak cee9360e4b ControllerInterface/SDL: Remove manual window message pumping on Windows.
The mentioned SDL hotplug issue seems to have been fixed.
2025-08-17 12:53:09 -05:00
Jordan Woyak cec41b2448 ControllerInterface/SDL: Don't force SDL_HINT_JOYSTICK_THREAD.
SDL3 enables it by default now and things seem to work properly even when it's off these days.
2025-08-17 12:49:19 -05:00
Admiral H. Curtiss bec5624287 Merge pull request #13177 from jordan-woyak/remove-nunchuk-hax
ControllerEmu: Remove nunchuk stick data hax.
2025-08-01 22:00:17 +02:00
JosJuice 62bc93473f Merge pull request #13781 from Dentomologist/controllerinterface_fix_windows_deadlock
ControllerInterface: Fix Windows deadlock
2025-07-30 21:49:23 +02:00
JosJuice 1c7df370d9 Revert "Android/GCAdapter: Don't join current thread"
This reverts commit 74ed5e5532.
It solves a problem that no longer exists.
2025-07-27 11:21:04 +02:00
JosJuice 185569778c Android: Detect GCAdapter disconnection using BroadcastReceiver
This lets us get rid of the Reset call in ProcessInputPayload, which was
causing us some threading headaches (see 74ed5e5532). Instead we handle
disconnection in the same way as the libusb implementation does.
2025-07-27 11:21:04 +02:00
JosJuice e2e33becc9 Android: Detect GCAdapter connection using BroadcastReceiver
We can register a BroadcastReceiver to have Android tell us when a GC
adapter gets connected instead of having a loop where we continuously
call SleepCurrentThread(1000) and poll the current status. When waiting
for a GC adapter to connect, this both reduces power usage and improves
responsiveness.

Note that I made openAdapter get the UsbDevice that's been stored by the
hotplug code instead of having openAdapter find the UsbDevice on its own
like before. This is only because I want to ensure that the UsbDevice
being tracked for disconnection is the same as the UsbDevice actually
being used, in case the user has multiple adapters connected.
2025-07-27 11:21:04 +02:00
JosJuice 7508842859 Android: Clean up naming in Java_GCAdapter and Java_WiimoteAdapter
This isn't how we name things in Java/Kotlin.
2025-07-27 11:13:44 +02:00
Jordan Woyak dcb289be8f InputCommon/ControllerEmu: Fix saving of Wii Remote "Attach MotionPlus" setting. 2025-07-24 18:44:42 -05:00
Jordan Woyak c39c8277b7 Merge pull request #13674 from JosJuice/android-visualize-input
Android: Show input indicators in controller settings
2025-07-20 17:46:47 -05:00
Jordan Woyak 633fd5df70 Merge pull request #13775 from jordan-woyak/sdl-gamepad-rename
InputCommon: Rename SDL input backend GameController to Gamepad.
2025-07-12 16:50:04 -05:00
Joshua Vandaële 06882bd2dc Fix various warnings 2025-07-12 12:47:30 +02:00
Dentomologist c613d3ca10 ControllerInterface: Fix Windows deadlock
Remove the redundant s_populate_mutex and only use
ControllerInterface::m_devices_population_mutex instead to prevent a
deadlock caused by locking them in opposite orders.

The device population functions in the win32 InputBackend previously
locked s_populate_mutex first before calling various functions that
locked m_devices_population_mutex. This normally worked but
ControllerInterface::RefreshDevices locks m_devices_population_mutex
first and then calls HandleWindowChange which then locked
s_populate_mutex, potentially causing the deadlock.

Fix this by using PlatformPopulateDevices to lock
m_devices_population_mutex before running the code that was previously
protected by s_populate_mutex. The functions in question lock
m_devices_population_mutex anyway, so this shouldn't meaningfully
increase contention on the lock.

Reproduction steps:

* Let Dolphin finish startup.
* In Win32.cpp::OnDevicesChanged set a breakpoint on the call to
  PlatformPopulateDevices. When the breakpoint is triggered the function
  will have locked s_populate_mutex, but since PlatformPopulateDevices
  won't have run yet m_devices_population_mutex will still be unlocked.
* Unplug a device from your computer.
* Wait for the breakpoint to trigger. (At this point you can plug the
  device back in).
* Freeze the ntdll.dll!TppWorkerThread() that triggered the breakpoint.
* Resume Dolphin and start a game.
* Core::EmuThread will call ControllerInterface::ChangeWindow which
  calls RefreshDevices. It locks m_devices_population_mutex, then calls
  InputBackend::HandleWindowChange, which tries to lock
  s_populate_mutex.
* Unfreeze ntdll.dll!TppWorkerThread().

At this point EmuThread and TppWorkerThread are deadlocked. The UI is
still responsive since the Host thread is unaffected, but trying to stop
the game or close Dolphin normally will fail since EmuThread is unable
to stop.
2025-06-28 14:00:27 -07:00