« Back to Applications

PPC Trackpad Scroll

PowerPC Mac (Tiger/Leopard) 向け Source Available

A menu-bar background app for legacy PowerPC Macs (iBook, PowerBook, etc.) whose trackpads don't support two-finger scrolling. Hold the ⌘ (Command) key and move the trackpad up or down, and the screen scrolls — no Dock icon, just a small "TP" item in the menu bar.

Download ppc-trackpad-scroll.zip
Downloads so far: 7
Last updated: 2026-09-20 (v0.5)
Note: Tiger's stock Safari/curl can't verify today's HTTPS certificates, so downloading here directly can fail. We recommend Aquafox — the PowerPC-era browser we make a Japanese language pack for — which handles modern HTTPS fine. Failing that, fetch the file on a modern machine and copy it over, or use a modern curl via Tigerbrew/MacPorts.

Changelog

  • 2026-09-20 — Initial release. A menu-bar app that turns holding ⌘ + moving the trackpad into scrolling. Automatically follows the Mac's Japanese/English system language setting. After testing on real PowerBook G4 hardware, added a 0.8-second grace period to absorb momentary ⌘-flag dropouts from modifier-remap utilities like DoubleCommand.

Requirements

  • Mac OS X 10.4 Tiger / 10.5 Leopard, PowerPC
  • Universal Access enabled — System Preferences > Universal Access > "Enable access for assistive devices" (the app walks you through this on first launch if it's off, and retries automatically once you turn it on)

Installation

  1. Put PPC Trackpad Scroll.app anywhere you like (e.g. the Applications folder).
  2. Double-click to launch — a "TP" label appears in the menu bar.
  3. If Universal Access is off, follow the dialog to turn it on.

The app links only against standard OS frameworks, so moving the folder around doesn't break it — it's safe to run straight out of the zip.

Using It

  • Hold ⌘ and move the trackpad up/down to scroll.
  • Click "TP" in the menu bar → Settings… to adjust scroll sensitivity, invert the scroll direction (inverted/"natural" is on by default), or check Universal Access status.

Language follows the Mac's system language automatically — there's no in-app switch. Any language other than Japanese falls back to English.

Note for Aquafox (TenFourFox-family) users

Gecko-based browsers like Aquafox treat ⌘+wheel as page zoom. If you're remapping a key (e.g. the right Enter key) to ⌘ with something like DoubleCommand, a normal scroll can get misread as a zoom. Fix it by opening about:config in Aquafox's address bar and setting mousewheel.with_meta.action (and mousewheel.with_control.action if needed) to 0.

Known Limitations

  • PowerPC-only build — won't run on Intel Macs.
  • Scroll amount depends on the sensitivity setting and actual trackpad movement, so it may need tuning per machine/preference.
  • The app doesn't distinguish a trackpad from an external mouse, so ⌘+mouse-movement scrolls too — this can fire unintentionally on desktop Macs with no trackpad.
  • If you use DoubleCommand or a similar key-remap utility to assign ⌘ to another key, it may work a little less smoothly than the real ⌘ key. There's a workaround for this in place, but it's not 100% perfect.
  • Tested on an iBook G4 and PowerBook G4, Mac OS X 10.4.11.

A personal hobby project provided with no warranty. MIT license — see the GitHub repository above for full source and license files.

Uses CGEventTapCreate to watch system-wide kCGEventFlagsChanged / kCGEventMouseMoved events. While ⌘ is held, kCGEventMouseMoved events are intercepted: the cursor move is cancelled and a synthetic scroll-wheel event is posted instead. Only button-up movement is watched, so click-drags and tap-lock drags (e.g. ⌘+dragging a file) are delivered as a different event type and never touched. The synthetic scroll event has its modifier flags explicitly cleared, so it doesn't collide with the common "⌘+scroll = zoom" convention (see the Aquafox note above for the one exception).

Bugs and lessons along the way

Posting a scroll event straight from the event-tap callback could hang the whole machine. The first version called CGEventCreate/CGEventPost synchronously inside the tap callback itself. Moving the trackpad quickly on real PowerPC hardware fired that callback often enough that the WindowServer round-trip backed up and froze the whole system. The fix: the callback now only accumulates scroll distance, and a 50 Hz (0.02s) timer does the actual CGEventPost in a batch, keeping the tap callback itself as light as possible.
Modifier-remap utilities like DoubleCommand make the ⌘ flag flicker. Testing on a real PowerBook G4 with DoubleCommand (remapping the right Enter key to ⌘) showed the ⌘ flag dropping out intermittently for anywhere from a few hundred milliseconds to a couple of seconds — maximizing the OS's key-repeat rate didn't help, so this looks like timing internal to the DoubleCommand kext itself. Cutting the gesture the instant the flag dropped made the app feel like it needed constant, deliberate pressure to keep working. The fix remembers that ⌘ was down within the last moment and tolerates a flag dropout inside that window without ending the gesture. That window went through a few real-hardware rounds — 120ms, then 0.8s, then briefly 1.0s — before settling back on 0.8s, since Tiger/Leopard has no background-window scrolling to make a longer delay in releasing real ⌘ keyups feel wrong.
Clamping scroll distance could silently eat the accumulated value. At high sensitivity plus a fast flick, the code was subtracting the pre-clamp rounded value from the running accumulator instead of the post-clamp value actually sent, so part of every large motion just vanished. Fixed by subtracting exactly what was posted.

Full source code is on GitHub.

Feedback on this app

Rating (optional)