Skip to content

Thumbwheel rotation can trigger hidden App Exposé tap binding #340

Description

@MoosaTae

Problem

On an MX Master 3S, customizing thumbwheel sensitivity or rotation bindings diverts the wheel through HID++ 0x2150. Setting both rotation directions to Do Nothing suppresses scrolling, but rolling and releasing the wheel can still trigger App Exposé.

Reproduction

  1. Select an MX Master 3S.
  2. Set thumbwheel sensitivity away from the default, or customize either rotation direction.
  3. Set Thumb Wheel Up and Thumb Wheel Down to Do Nothing.
  4. Roll the thumbwheel and release it.

Expected

Rotation is suppressed and no unrelated action fires.

Actual

App Exposé can fire because the wheel reports a capacitive single-tap event separately from rotation.

Root cause

  • ButtonId::Thumbwheel represents the capacitive tap and defaults to AppExpose.
  • The mouse model replaces the thumbwheel hotspot with Up/Down controls, so the tap binding is hidden and cannot be changed in the GUI.
  • The HID capture path receives tap and rotation independently, but the hidden tap action still dispatches.
  • Rotation diversion is incorrectly gated on the device advertising single-tap capability, preventing customized rotation on devices without tap support.

Proposed fix

  • Default thumbwheel tap to Do Nothing.
  • Expose Up, Tap, and Down as separate non-overlapping GUI controls.
  • Preserve explicit existing tap mappings.
  • Divert rotation whenever thumbwheel capture is requested; use single-tap capability only to gate tap dispatch.
  • Add core, projection, HID decode, capture-arming, geometry, and localization tests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions