Skip to content
Branch: master
Go to file

Latest commit

invariant committed 12c2ed2 Nov 20, 2019
Apply Xcode suggested project settings changes

Address some of the deprecation warnings

Remove StartAtLoginController due to deprecated API use.
Improve Tap creation so as to not crash at least.

Fix NSAlert deprecations

Fix minor autolayout glitch

Remove Reverse Tablet option and Wacom detection code

Fix colour of link view in prefs

Fighting autolayout

Chang URL for beta updates, and activate with prefs key

Deployment target 10.12

Sign with Development cert

Wire up the enabled check box/menu item so as to reflect the actual active state

change Reverse Scrolling to Enable Scroll Reverser

add new string to localization files

rebind enabled states of controls

Wire up prefs properly; plus fiddling

Add and integrate Permissions Manager

Remove NSLogs that were slowing things down

Add skeleton of permissions sheet; wire up applescript again

MSV 10.12

Wire up permissions sheet to appear at the right times

Start work on table view for permissions

Permissions table just barely working now

Good, good...

Use URL scheme for permission prompts (RequestAccess does not work properly)


Permissions manager auto-refreshes itself on a timer now

Actually ask for permissions again

Add auto close sheet

default off


Failed to load latest commit information.

Scroll Reverser

Reverse the direction of scrolling on macOS.

Home page:


Licensed under Apache License 2.0.

Notes on the code

The 'master' branch build targets 10.7 and higher.

Older code targeting 10.4+ is in the 'tiger' branch.

The real guts of the code is in MouseTap.m. Everything else is just user interface rigging.

Scroll Reverser installs an event tap, which gives access to event stream, including scrolling events and gesture events. The main documentation is Quartz Event Services Reference.

To distinguish between trackpad and mouse, Scroll Reverser essentially looks at the gesture events to determine whether there are 2 or more fingers on the trackpad. If so, it assumes it is the trackpad. If not, mouse. It's a little more complicated than that as you will see, but that is the general idea.

You can’t perform that action at this time.