MGR: eliminate almost all overhead from my commit a8cc13f unless assistive software is in use

This commit is contained in:
Charlie Fenton 2014-06-10 04:40:33 -07:00
parent 6aab68fdc9
commit dcc0afaaa0
1 changed files with 25 additions and 20 deletions

View File

@ -1047,6 +1047,8 @@ static void wxRectToNSRect(wxRect &wxr, NSRect &nsr) {
// is somewhere in the caller chain. // is somewhere in the caller chain.
// I wish I could find a more efficient way to do this. // I wish I could find a more efficient way to do this.
// //
static BOOL AccessibilityEnabled = false;
- (NSView *)hitTest:(NSPoint)aPoint { - (NSView *)hitTest:(NSPoint)aPoint {
// [NSThread callStackSymbols] is not available in OS 10.5, so // [NSThread callStackSymbols] is not available in OS 10.5, so
// BOINC does not fully implement accessibility under OS 10.5. // BOINC does not fully implement accessibility under OS 10.5.
@ -1073,33 +1075,36 @@ static void wxRectToNSRect(wxRect &wxr, NSRect &nsr) {
return [super hitTest:aPoint]; // Point is not within our rect return [super hitTest:aPoint]; // Point is not within our rect
} }
// NSArray *theStack = [NSThread callStackSymbols]; if (AccessibilityEnabled) {
NSArray *theStack = [ NSThread performSelector:@selector(callStackSymbols) ]; // NSArray *theStack = [NSThread callStackSymbols];
NSArray *theStack = [ NSThread performSelector:@selector(callStackSymbols) ];
int limit = [ theStack count ]; int limit = [ theStack count ];
int i = 0; int i = 0;
do { do {
if (limit < (i+1)) break; if (limit < (i+1)) break;
NSString *sourceString = [theStack objectAtIndex:i]; NSString *sourceString = [theStack objectAtIndex:i];
NSCharacterSet *separatorSet = [NSCharacterSet characterSetWithCharactersInString:@" -[]+?.,"]; NSCharacterSet *separatorSet = [NSCharacterSet characterSetWithCharactersInString:@" -[]+?.,"];
NSMutableArray *array = [NSMutableArray arrayWithArray:[sourceString componentsSeparatedByCharactersInSet:separatorSet]]; NSMutableArray *array = [NSMutableArray arrayWithArray:[sourceString componentsSeparatedByCharactersInSet:separatorSet]];
[array removeObject:@""]; [array removeObject:@""];
if ([array count] >= 5) {
NSString *FunctionCaller = [array objectAtIndex:4];
if ([ FunctionCaller hasPrefix: @"accessibility"]) {
return self;
}
if ([array count] >= 5) {
NSString *FunctionCaller = [array objectAtIndex:4];
if ([ FunctionCaller hasPrefix: @"accessibility"]) {
return self;
} }
++i;
} } while (i < 15);
++i; }
} while (i < 15);
return [super hitTest:aPoint]; // Not an accessibility call return [super hitTest:aPoint]; // Not an accessibility call
} }
- (BOOL)accessibilityIsIgnored { - (BOOL)accessibilityIsIgnored {
AccessibilityEnabled = true;
return NO; return NO;
} }