-
-
Notifications
You must be signed in to change notification settings - Fork 25
Bug: macOS DualSense mapping issues — system buttons, touchpad #95
Description
Description
On macOS (Darwin 25.x), the PS5 DualSense controller has several mapping issues:
-
Options button (Start) maps to
GamepadButton.backinstead ofGamepadButton.start
The macOS plugin identifies buttons by SF Symbol names, but both the Options and Create buttons reportcapsule.portrait— which is hardcoded asback. This makes them indistinguishable and both map to the wrong value. -
Touchpad click is not mapped
Pressing the touchpad surface fires an event with SF Symbolplus.rectangle, but no pattern inMacosMappingmatches it, so it's silently dropped. -
Touchpad finger movement is not mapped
Swiping the touchpad surface fires analog events with SF Symbolhand.draw, which is also unrecognized.
Root Cause
The macOS native plugin (gamepads_darwin) uses GCControllerElement.sfSymbolsName to identify all buttons. SF Symbol names are ambiguous across controller types — for example, capsule.portrait represents the View/Back button on Xbox but the Options/Start button on DualSense.
The iOS plugin avoids this by registering handlers on typed GCExtendedGamepad properties (e.g. gamepad.buttonMenu, gamepad.buttonOptions) and using fixed key names. The macOS plugin should do the same for system buttons.
Raw event log
Options button (expected: start, got: back)
[DualSense] GamepadButton.back = 1.0 (raw: capsule.portrait 1.0)
Touchpad click (unmapped)
[DualSense] [unmapped] button: plus.rectangle = 1.0
Touchpad finger (unmapped)
[DualSense] [unmapped] analog: hand.draw - xAxis = -1.0
[DualSense] [unmapped] analog: hand.draw - yAxis = 1.0
Environment
- macOS 16 (Darwin 25.3.0)
- DualSense Wireless Controller (PS5)
- Flutter stable