Skip to content

Add 'Toggle Mac Mouse Fix' button action (gaming mode) - #1859

Open
miguelAngelo1999 wants to merge 2 commits into
noah-nuebling:masterfrom
miguelAngelo1999:feature/gaming-mode-toggle
Open

Add 'Toggle Mac Mouse Fix' button action (gaming mode)#1859
miguelAngelo1999 wants to merge 2 commits into
noah-nuebling:masterfrom
miguelAngelo1999:feature/gaming-mode-toggle

Conversation

@miguelAngelo1999

Copy link
Copy Markdown

Adds a button action that toggles all MMF interception on/off.

Uses the existing scrollKillSwitch + buttonKillSwitch config keys. Press the mapped button to disable MMF, press again to re-enable.

Use case: gaming, or any situation where you need raw mouse input without MMF processing.

Minimal implementation — 4 files, ~20 lines of new code.

miguelAngelo1999 and others added 2 commits April 30, 2026 15:12
…a buttons

Fixes noah-nuebling#1791, noah-nuebling#1790, noah-nuebling#1800, noah-nuebling#1740, noah-nuebling#1744

Logitech mice with extra buttons (thumb, tilt wheel, precision, side buttons)
use HID++ 2.0 ReprogControlsV4 (feature 0x1B04). These buttons are silently
consumed by the mouse firmware until the host sends a SetCidReporting command
to divert them. Once diverted, they arrive as 0x11 long reports.

This implementation calls Buttons.handleInput() directly — no CGEvent
round-trip needed, no extra event tap overhead.

Protocol:
- GetFeature(0x1B04) -> feature index
- GetCount -> number of controls on this device
- GetCidInfo for each control -> CID, TID, capability flags
- Skip controls whose TID maps to a native HID button (L/R/M/Back/Fwd)
- SetCidReporting with flags=0x03 (divert=1, divert_valid=1) for the rest

The flags byte follows the 'valid bit' pattern documented in Solaar
(pwr-Solaar/Solaar hidpp20.py): each flag bit has a corresponding valid bit
= flag << 1, telling firmware the field is being intentionally set.

TID-based filtering correctly excludes natively-reported buttons across all
Logitech models without any per-device hardcoding.

Tested on: Logitech M720 Triathlon (Bluetooth), macOS 15 Sequoia, macOS 26
- Left tilt  (CID=0x005B) -> button 6 in MMF ✅
- Right tilt (CID=0x005D) -> button 7 in MMF ✅
- Thumb      (CID=0x00D0) -> button 8 in MMF ✅
- Back/forward continue working natively (not diverted) ✅

References:
- https://github.com/pwr-Solaar/Solaar (hidpp20.py)
- https://github.com/libratbag/libratbag (hidpp20.c)
- https://lekensteyn.nl/files/logitech/x1b04_specialkeysmsebuttons.html
Maps to any button. Toggles both scrollKillSwitch and buttonKillSwitch,
effectively disabling all MMF interception. Press again to re-enable.
Useful for gaming or when you need raw mouse input temporarily.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants