Repository navigation
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
sirfergy
force-pushed
the
sirfergy/ios-controller-input-in-game
branch
from
July 30, 2026 21:11
993545a to
2268e77
Compare
sirfergy
marked this pull request as ready for review
July 30, 2026 21:18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A connected controller does nothing during gameplay on recent iOS versions, even though the mapping screen registers every button. Two separate things go wrong, and both have to be fixed for input to reach the emulated pad.
Closes #226
What
EmulationViewControllerderives fromGCEventViewController, and the emulation screen setscontrollerUserInteractionEnabled = NO. While controller user interaction is on, iOS routes the face buttons (A/B/X/Y) into UIKit menu-focus navigation and they never reach the game. Sticks are unaffected, which is why input looks half-working. This is scoped to the emulation view controller, so controller-driven UI navigation elsewhere in the app is untouched.RefreshDevices()runs when emulation starts. Devices are otherwise only populated at app launch and in the mapping screen, so a controller connected after launch isn't in theControllerInterfacewhen the game boots.GCPad::GetInputthen sees the pad's default device as disconnected and returns before reading any buttons.Tests
Verified on-device (iPhone, iOS 26) across TestFlight builds: buttons and sticks drive the emulated GameCube pad in-game, and autorotation and the rest of the app's UI behave as before.
Diagnosis was confirmed by reading
GCControllerstate directly on the main thread during gameplay: the left stick's axis value updated live whilebuttonA.isPressedstayedfalse, which isolates the loss to iOS consuming the face buttons rather than anything in Dolphin's input stack.Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com