Skip to content

Bug: macOS DualSense mapping issues — system buttons, touchpad #95

@gnarhard

Description

@gnarhard

Description

On macOS (Darwin 25.x), the PS5 DualSense controller has several mapping issues:

  1. Options button (Start) maps to GamepadButton.back instead of GamepadButton.start
    The macOS plugin identifies buttons by SF Symbol names, but both the Options and Create buttons report capsule.portrait — which is hardcoded as back. This makes them indistinguishable and both map to the wrong value.

  2. Touchpad click is not mapped
    Pressing the touchpad surface fires an event with SF Symbol plus.rectangle, but no pattern in MacosMapping matches it, so it's silently dropped.

  3. Touchpad finger movement is not mapped
    Swiping the touchpad surface fires analog events with SF Symbol hand.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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions