import objc
import CoreFoundation
import AppKit

# bs = {}
# bs_bundle = objc.initFrameworkWrapper('BezelServices', '/System/Library/PrivateFrameworks/BezelServices.framework', None, bs)
# objc.loadBundleFunctions(bs_bundle, bs, [('BSKernelPreferenceChanged', '@@')])
# 
app = 'com.apple.driver.AppleBluetoothMultitouch.trackpad'
CoreFoundation.CFPreferencesSetAppValue('TrackpadThreeFingerHorizSwipeGesture',
                                        1,
                                        app)
CoreFoundation.CFPreferencesAppSynchronize(app)
# bs['BSKernelPreferenceChanged'](app)
# bs['BSKernelPreferenceChanged']('com.apple.AppleMultitouchTrackpad')

CoreFoundation.CFPreferencesSetValue(
    'AppleEnableSwipeNavigateWithScrolls',
    0,
    CoreFoundation.kCFPreferencesAnyApplication,
    CoreFoundation.kCFPreferencesCurrentUser,
    CoreFoundation.kCFPreferencesAnyHost,
)
CoreFoundation.CFPreferencesSynchronize(
    CoreFoundation.kCFPreferencesAnyApplication,
    CoreFoundation.kCFPreferencesCurrentUser,
    CoreFoundation.kCFPreferencesAnyHost,
)

pps = {}
pps_bundle = objc.initFrameworkWrapper(
    'PreferencePanesSupport',
    '/System/Library/PrivateFrameworks/PreferencePanesSupport.framework',
    None,
    pps,
)
backend = pps['MTTGestureBackEnd'].sharedInstance()
backend.setThreeFingerHorizSwipe_(1)

noti = AppKit.NSNotificationCenter.defaultCenter()
noti.postNotificationName_object_userInfo_(
    'AppleEnableSwipeNavigateWithScrollsDidChangeNotification',
    None,
    None,
)
dnot = AppKit.NSDistributedNotificationCenter.defaultCenter()
dnot.postNotificationName_object_userInfo_(
    'AppleEnableSwipeNavigateWithScrollsDidChangeNotification',
    None,
    None,
)
