void SwizzleNSApplicationAccessibilitySetter() { // Swizzle accessibilitySetValue:forAttribute: so that we can detect when VoiceOver gets enabled var nsApplicationClassHandle = Class.GetHandle("NSApplication"); // This happens if GtkMac is loaded before XamMac if (nsApplicationClassHandle == IntPtr.Zero) { return; } var accessibilitySetValueForAttributeSelector = Selector.GetHandle("accessibilitySetValue:forAttribute:"); var accessibilitySetValueForAttributeMethod = class_getInstanceMethod(nsApplicationClassHandle, accessibilitySetValueForAttributeSelector); originalAccessibilitySetValueForAttributeMethod = method_getImplementation(accessibilitySetValueForAttributeMethod); var block = new BlockLiteral(); SwizzledAccessibilitySetValueForAttributeDelegate d = accessibilitySetValueForAttribute; block.SetupBlock(d, null); var imp = imp_implementationWithBlock(ref block); method_setImplementation(accessibilitySetValueForAttributeMethod, imp); accessibilityInUse = CFPreferences.GetAppBooleanValue("voiceOverOnOffKey", "com.apple.universalaccess"); a11yHelperInitialized = true; }
void SwizzleNSApplication() { // Swizzle accessibilitySetValue:forAttribute: so that we can detect when VoiceOver gets enabled var nsApplicationClassHandle = Class.GetHandle("NSApplication"); var accessibilitySetValueForAttributeSelector = Selector.GetHandle("accessibilitySetValue:forAttribute:"); var accessibilitySetValueForAttributeMethod = class_getInstanceMethod(nsApplicationClassHandle, accessibilitySetValueForAttributeSelector); originalAccessibilitySetValueForAttributeMethod = method_getImplementation(accessibilitySetValueForAttributeMethod); var block = new BlockLiteral(); SwizzledAccessibilitySetValueForAttributeDelegate d = accessibilitySetValueForAttribute; block.SetupBlock(d, null); var imp = imp_implementationWithBlock(ref block); method_setImplementation(accessibilitySetValueForAttributeMethod, imp); }