Advertisement

Inertial scrolling should be possible on all multi-touch trackpads

A new feature called "inertial scrolling" has been introduced in the latest MacBook Pros. This feature changes the way that scrolling functions in OS X, making it behave more like the iPhone. Traditionally, when you use two-finger scrolling in OS X, scrolling stops dead as soon as your fingers stop moving. On the iPhone, however, there's a certain "momentum" to scrolling that is entirely dependent on how quickly you flick your finger to scroll; slow scrolling motions have almost no momentum to them at all, while fast flicks mean the screen continues to scroll long after your finger has left the tracking surface, possibly even scrolling all the way to the top or bottom of what you're scrolling through in a matter of seconds. Many people prefer the way scrolling behaves on the iPhone compared to the Mac, so it's been introduced as an optional behavior in the newest MacBook Pros.

Since the multi-touchtrackpads on the MacBook, MacBook Air, and MacBook Pro use essentially the same multi-touch hardware as the iPhone, it's been possible to bring this same scrolling behavior into OS X. However, it only works on the newest MacBook Pros for now. I suspected that there wasn't any reason this new inertial scrolling behavior couldn't be implemented on the older multi-touch trackpads, so I spent most of the morning investigating how to get it working on my Early 2008 MacBook Pro (the first model of MacBook Pro with a multi-touch trackpad). Read on to find out what I discovered.



First, a bit of background to establish a precedent for why I believe inertial scrolling should work on all multi-touch trackpads, and not just the ones on the newest MacBook Pros. When first introduced on the MacBook Air, the multi-touch trackpad supported standard two-finger scrolling just like older trackpads. However, it also introduced rotating, pinching, and three-finger swipe gestures. These new gestures were possible because the MacBook Air's trackpad used a multi-touch controller chip that was similar, if not identical, to the one used in the iPhone. A month after the MacBook Air's release, the Early 2008 MacBook Pro was released with an identical multi-touch trackpad. Later in 2008, when the MacBook Pro line was updated with unibody enclosures and glass trackpads, these new MacBook Pros also gained an additional set of gestures: four-finger swipes to invoke Exposé and the application switcher.

Many people suspected that these new four-finger gestures were implementable on the older MacBook Air and Pro multi-touch trackpads via a software update, and they were correct. Enterprising hackers cooked up an updated extension for these older models that allowed the new four-finger gestures to work. Almost a year later, Apple rendered this extra work unnecessary with Snow Leopard's release, which enabled four-finger gestures for all Apple notebooks with multi-touch trackpads.

Today, we have a nearly identical situation: the new inertial scrolling behavior, present only in the newest MacBook Pros, seems like something that should be easily ported to the older multi-touch trackpads via a software update. The iPhone has inertial scrolling by default, and since all multi-touch trackpads use essentially the same controller chip, it seems that there aren't any hardware limitations preventing inertial scrolling from working on older multi-touch trackpads.

To investigate the possibility of enabling inertial scrolling on my Early '08 MacBook Pro, I asked my dad to send me a few files from his new 13" MacBook Pro:

/System/Library/Extensions/AppleUSBMultitouch.kext
/System/Library/Extensions/AppleUSBTopCase.kext
/System/Library/PreferencePanes/Trackpad.prefPane
These were the three files needed to enable four-finger gestures on the older Multi-Touch trackpads before Snow Leopard's release, so I figured the same files would be necessary for enabling inertial scrolling.

First, the good news. After looking through the info.plist file for AppleUSBMultitouch.kext from my dad's new MacBook Pro and comparing it against the same file on my older MacBook Pro, not only does it appear that inertial scrolling is possible on the older trackpads via a software update, but it may also be coming as soon as the 10.6.4 update. In the old info.plist from my MacBook Pro, there are several instances of a string that reads:

<key>TrackpadFourFingerGestures</key>
<true/>

This string is a reliable identifier of Multi-Touch trackpads within the info.plist file for AppleUSBMultitouch.kext, because as of Snow Leopard, all Multi-Touch trackpads support four-finger gestures. When examining the same info.plist from my dad's new MacBook Pro, the FourFingerGestures string was followed, without a single exception, with the following string:

<key>TrackpadMomentumScroll</key>
<true/>

There wasn't a single instance within this new info.plist where the FourFingerGestures string was not followed by the TrackPadMomentumScroll string. So, there's the good news: inertial scrolling should be possible on all multi-touch trackpads, and we might not have to wait very long for official support from Apple.

Now the bad news: I wasn't able to get inertial scrolling working on my MacBook Pro, even after installing the three files from my dad's Mac and spending a whole morning wrestling with it. I spent most of the morning unable to use any multi-touch gestures at all after installing the new files. For some reason, even though Disk Utility said it was repairing permissions on the changed extensions (an essential step to ensure that these files load properly after restarting the Mac), it never actually repaired the permissions at all. As a result, AppleUSBMultitouch.kext and AppleUSBTopCase.kext wouldn't load at all, which meant that, not only were there no multi-touch gestures, but my keyboard's function keys were disabled as well. After a couple hours, I was finally able to figure out how to fix things so that multi-touch gestures and my function keys worked (using the new extensions and prefpane). Even after all of that effort, though, inertial scrolling still doesn't work, and it doesn't show up as an option in System Preferences under Trackpad.

My amateurish failure to hack this thing aside, I'm still convinced it's possible to enable inertial scrolling on multi-touch trackpads without waiting for official support from Apple (which may come in 10.6.4 but also may not come until 10.7, if ever). It's possible that there are more files needed other than the three I got from my dad's MacBook Pro. It's also possible that additional steps are necessary with the files I already have in order to enable inertial scrolling. Hopefully some enterprising Mac geek will read this and have a solution. If, after reading through this, you have an idea how to get inertial scrolling working on older multi-touch trackpads, let us know in the comments.

So you know, just like all other multi-touch gestures, inertial scrolling will only ever be possible on the following Macs:

MacBook Air
Early 2008 MacBook Pro
Late 2008 17" MacBook Pro
All unibody MacBook Pros
All unibody aluminum MacBooks
The late 2009 unibody polycarbonate MacBook with glass trackpad

Basically, if you have a MacBook Pro that was released before February 2008, a plastic MacBook without a glass trackpad, or any PowerBook or iBook, no Multi-Touch gestures (other than simple two-finger scrolling) will ever work on your trackpad because the hardware simply doesn't support it. If you do have one of the models that supports Multi-Touch, though, I don't see any reason why inertial scrolling shouldn't work just as well on those Macs as it does on the iPhone.