Devo disattivare/disattivare a livello di codice i gesti tattili di sistema su Mac OS. Mi riferisco a gesti come lo scorrimento a 4 dita tra gli spazi, ecc.OSX - Disattivazione dei gesti tattili a livello di sistema
Ho cercato su EventTap ma non sembra un'opzione (nonostante i rapporti precedenti qui - forse è cambiato sotto 10.8)
Ho anche provato numerosi modi per modificare le preferenze di sistema in modo programmatico. Ad esempio, ho provato a utilizzare IOConnectSetCFProperties sul servizio che lo ha localizzato utilizzando IORegistryEntryCreateCFProperties.
Ho anche approfondito riquadro trackpad preferenze per vedere come lo fanno, e ho cercato di riprodurlo (ignora qualsiasi CREATE/incongruenze di rilascio, questo è solo il codice di prova):
NSInteger zero = 0;
CFNumberRef numberWith0 = CFNumberCreate(kCFAllocatorDefault, kCFNumberNSIntegerType, &zero);
CFMutableDictionaryRef propertyDict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(propertyDict, @"TrackpadFourFingerHorizSwipeGesture", numberWith0);
io_connect_t connect = getEVSHandle(); // Found in the MachineSettings framework
if (!connect)
{
NSLog(@"Unable to get EVS handle");
}
kern_return_t status = IOConnectSetCFProperties(connect, propertyDict);
if (status != KERN_SUCCESS)
{
NSLog(@"Unable to get set IO properties");
}
CFRelease(propertyDict);
CFPreferencesSetValue(CFSTR("com.apple.trackpad.fourFingerHorizSwipeGesture"), _numberWith0, kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesSetValue(CFSTR("TrackpadFourFingerHorizSwipeGesture"), _numberWith0, CFSTR("com.apple.driver.AppleBluetoothMultitouch.trackpad"), kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
CFPreferencesSynchronize(kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
status = BSKernelPreferenceChanged(CFSTR("com.apple.driver.AppleBluetoothMultitouch.trackpad"));
In in questo caso sembra funzionare, non ci sono errori e l'opzione diventa disabilitata nel pannello delle preferenze di sistema, tuttavia il gesto con quattro dita continua a funzionare. Ho il sospetto che il logout in poi avrà un effetto, ma non l'ho provato perché non è abbastanza buono in ogni caso.
Vale la pena notare che anche il riquadro di prefetto chiama BSKernelPreferenceChanged, ma non conosco quale framework potrebbe essere per collegarsi ad esso. Forse questa è la chiave del problema ...
AGGIORNAMENTO: In realtà ora l'ho trovato e collegato. L'aggiunta di quella chiamata non ha fatto alcuna differenza, sebbene restituisca 1 che potrebbe indicare un errore. Ho aggiunto la chiamata al codice sopra.
Infine ho provato questo dal terminale:
defaults write -globalDomain com.apple.trackpad.fourFingerHorizSwipeGesture 0
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadFourFingerHorizSwipeGesture 0
che non ha un effetto immediato o.
Non credo che questo non è possibile, ci deve essere un modo ...
compatibilità MAS non è necessaria.
Per i "defaults write" bit, che cosa si intende per "non avere un immediato effetto "Funziona dopo il riavvio? Molte volte devi "killall dock" e "killall finder" per rendere effettive alcune delle impostazioni predefinite. – jeremy
Ciao Jeremy. Anzi, ma ho bisogno che abbia un effetto immediato, come quando cambia le opzioni del trackpad nel pannello delle preferenze. – tarmes
potresti provare a riavviare il finder, se non vuoi disconnetterti. –