Godmouse 0.2.0
Gestures on the Magic Mouse surface: tap to click, tap and drag, two-finger drag, and a tap zone that keeps the fingers gripping the mouse from clicking.
Everything here is off by default — turn on what you want in Settings → Clicking. The scroll fixes from 0.1.0 are unchanged.
New
- Tap to click — a light single-finger tap left-clicks, no press needed. One Firm↔Light slider tunes it. Taps are rejected automatically while (and shortly after) scrolling, during and right after physical clicks, for multi-finger contacts, resting fingers, and grazes. Double- and triple-taps become real double-/triple-clicks.
- Tap zone — restrict taps to the front of the surface, away from the side edges, so the fingers holding the mouse can't click. Adjustable depth.
- Tap and drag — tap, touch again and hold, then move the mouse to drag; lift to drop. The button press is deferred until you actually start moving, so a finger that just comes back to rest, or swipes to scroll, presses nothing at all. A quick second tap is still a double-click, so double-click-drag works in text.
- Two-finger drag (long press) — rest two fingers together and hold; after a moment the button presses down. Fingers that land one after the other are grip, not gesture, and never trigger it.
Under the hood
Raw touches come from the private MultitouchSupport framework through a dlopen bridge, so the app still builds with plain swift build and degrades gracefully (minus the tap features) if a macOS release drops it. Everything is gated on the Magic Mouse specifically — trackpads and other mice are untouched.
Three things the long-standing open-source lore about that framework gets wrong on macOS 26, all found by capturing raw frames from real hardware:
MTDeviceIsOpaqueSurfacereturns false for the Magic Mouse, so devices are matched by family ID instead.- Touch state
4is not "touching" — a light tap lives in state 2 and only flashes 3→4→5 as it lifts. - The array returned by
MTDeviceCreateListowns the device handles; releasing it after registering callbacks silently kills frame delivery.
Godmouse --status now reports the whole tap pipeline — frames received, taps and drags posted, and for every rejected tap the gate that rejected it plus where it landed.
Install
Download Godmouse.zip, unzip, drag Godmouse.app to /Applications, then:
xattr -dr com.apple.quarantine /Applications/Godmouse.app
open /Applications/Godmouse.appOr right-click the app → Open. The build is unsigned (no paid Apple Developer membership behind this project); if you'd rather not run an unsigned binary, ./install.sh builds from source in about two minutes.
Then grant System Settings → Privacy & Security → Accessibility → Godmouse.
Updating from 0.1.0: macOS ties the Accessibility grant to the app's signature, so an unsigned update looks like a different app while the toggle still reads ON. If Godmouse says it has no permission, use Settings → General → Reset grant… (or tccutil reset Accessibility com.godmouse.app) and grant it again.
Requires macOS 13 or later. Developed and tested on macOS 26 with a Magic Mouse 2.