You can combine a userspace multitouch callback (via MTRegisterContactFrameCallback
) with a CGEventTap
to block tap events. From experimentation, the poor palm rejection seems to stem at the hardware level since if you look at the finger id reported in the multitouch frame it seems to think the palm is a thumb many times. By contrast the internal trackpad correctly and consistently distinguishes these two. So I just filtered based on fingerId (I never tap with my thumb anyway) and it works to filter 95% of clicks. If you'd like you can also play around with other parameters such as size, orientation, etc. (the contact frame format is well documented, see e.g. https://gist.github.com/rmhsilva/61cc45587ed34707da34818a76476e11 for sample code on how to use that)
You could get fancier and consider the position as well, which is how I believe BetterTouchTools does when you enable the "filter tap-to-click at magic trackpad edge feature." I'm not sure why the BTT dev said this was infeasible (as one of the other commenters linked in a github issue which has been deleted), since BTT already does have a feature to do this (the aforementioned prevent tap-to-click at the edge of the trackpad). But that's not implemented very well since it seems to apply to both the internal and external trackpads.
You could also extend this to pointer movement which can be similarly blocked with a cgeventtap. But the difficulty there may be in correlating between the raw trackpad event and the subsequent cgevent, which may be why the BTT dev hesitated.
By the way, you ever wondered how BTT is able to flip magic trackpad orientation even on 10.11 and above? It uses the MTDeviceSetSurfaceOrientation
call in private multitouch framework. Amazing that I found 0 references to this on the web. After 5 years you'd think someone might have gotten curious...