Skip to content

[BUG] Built-in MacBook trackpad is misidentified as “Touch Bar”, so native gestures never start #239

Open

Description

@DoffChen

On my MacBook, LaunchNext’s native trackpad gestures stopped working even though the gesture toggle is enabled and permissions are granted.

I traced it to device detection in the gesture stack:

OpenMTManager labels familyID == 105 as "Touch Bar" instead of a trackpad.
GestureTouchProvider only accepts devices whose name contains "Trackpad".
Because of that, the built-in trackpad is filtered out and LaunchNext never starts listening for gesture events. Reinstalling the app or resetting macOS permissions does not fix it.

Expected behavior:
Built-in MacBook trackpads should be recognized as valid gesture input devices and native pinch/tap gestures should work.

Actual behavior:
The built-in trackpad is exposed as Touch Bar, gets filtered out, and gestures never trigger.

Environment:

LaunchNext 2.4.1
macOS Tahoe
Built-in MacBook trackpad
Relevant code:

LaunchNext/ThirdParty/OpenMultitouchSupport/Framework/OpenMultitouchSupportXCF/OpenMTManager.m
LaunchNext/Gesture/GestureInputDevice.swift
Workaround:
External Magic Trackpad works; built-in trackpad does not.

Activity

  1. DoffChen commented on May 3, 2026

    @DoffChen
    Author

    LaunchNext Gesture Input Bug Report

    Problem Discovery

    • On macOS, the built-in trackpad is reported by the system as:
      • Product: Apple Internal Keyboard / Trackpad
      • Family ID: 105
      • Built-in: Yes
    • In LaunchNext's multitouch mapping, familyID == 105 is labeled as Touch Bar.
    • Gesture candidate filtering only accepts devices whose name contains Trackpad.
    • Result: the built-in trackpad is filtered out before gesture listening becomes effective, so pinch/tap gestures do not trigger even when:
      • gesture settings are enabled
      • system conflicts are disabled
      • Accessibility/Input permissions are granted

    Temporary Workaround (Installed App Only)

    • Patch the installed binary string from Touch Bar to Trackpad (same length), then re-sign the app.
    APP="/Applications/LaunchNext.app"
    BACKUP="/Applications/LaunchNext.app.bak-$(date +%Y%m%d-%H%M%S)"
    cp -R "$APP" "$BACKUP"
    
    python3 - << 'PY'
    from pathlib import Path
    p = Path('/Applications/LaunchNext.app/Contents/MacOS/LaunchNext')
    b = p.read_bytes()
    b = b.replace(b'Touch Bar', b'Trackpad ')
    p.write_bytes(b)
    print('patched')
    PY
    
    codesign --force --deep --sign - /Applications/LaunchNext.app
    osascript -e 'tell application "LaunchNext" to quit' >/dev/null 2>&1 || true
    open -a /Applications/LaunchNext.app

    Suggested Permanent Fix

    1. Fix incorrect device naming mapping

      • File: LaunchNext/ThirdParty/OpenMultitouchSupport/Framework/OpenMultitouchSupportXCF/OpenMTManager.m
      • Bug: familyID == 105 is mapped to Touch Bar.
      • Fix: map this family to a trackpad label (e.g., MacBook Trackpad) or use a reliable device-type property.
    2. Fix fragile candidate filtering logic

      • File: LaunchNext/Gesture/GestureInputDevice.swift
      • Bug: candidate detection relies on deviceName.localizedCaseInsensitiveContains("Trackpad").
      • Fix: do not rely on name substring matching; use a structured signal (e.g., isTrackpad, built-in multitouch traits, or family/type-based classification).
    Image
  2. RoversX commented on May 4, 2026

    @RoversX
    Owner

    Thanks, this looks like a real bug.

    I’ll change the detection to use a real trackpad flag / device characteristics instead of relying only on the display name.

  3. RoversX commented on May 6, 2026

    @RoversX
    Owner

    How about this
    Image

  4. DoffChen commented on May 6, 2026

    @DoffChen
    Author

    How about this
    Image

    I think it's so perfect

  5. RoversX commented on May 6, 2026

    @RoversX
    Owner

    6e474bd will be available in the next version!

  6. DoffChen commented on May 6, 2026

    @DoffChen
    Author

    6e474bd will be available in the next version!

    Thx!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions