From 0df514eb253b2d53f33d831a2ed7cdeecbef77c9 Mon Sep 17 00:00:00 2001 From: Mark Torres Date: Wed, 29 Oct 2014 22:51:30 -0400 Subject: [PATCH] Use windowController.selectTab so activate event is properly triggered. This will make plugins like http://canisbos.com/taboptions work with SafariTabSwitching. --- SafariTabSwitching/SafariTabSwitching.m | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/SafariTabSwitching/SafariTabSwitching.m b/SafariTabSwitching/SafariTabSwitching.m index 018c173..b7b37d1 100644 --- a/SafariTabSwitching/SafariTabSwitching.m +++ b/SafariTabSwitching/SafariTabSwitching.m @@ -14,7 +14,7 @@ @implementation NSApplication(SafariTabSwitching) - (void)SafariTabeSwitching_sendEvent:(NSEvent *)event { static NSArray *keyCode2TabIndex = nil; - + if (event.type == NSKeyDown && (event.modifierFlags & NSDeviceIndependentModifierFlagsMask) == NSCommandKeyMask) // only command modifier pressed { @@ -22,17 +22,18 @@ - (void)SafariTabeSwitching_sendEvent:(NSEvent *)event { keyCode2TabIndex = [[NSArray alloc] initWithObjects:@"18", @"19", @"20", @"21", @"23", @"22", @"26", @"28", @"25", nil]; } - + NSUInteger tabIndex = [keyCode2TabIndex indexOfObject:[[NSNumber numberWithInt:event.keyCode] stringValue]]; - + if (tabIndex != NSNotFound) { NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow]; - - if ([keyWindow respondsToSelector:@selector(orderedTabViewItems)] // check safari API compat - && [keyWindow respondsToSelector:@selector(setCurrentTabViewItem:)]) + NSWindowController *controller = keyWindow.windowController; + + if ([controller respondsToSelector:@selector(orderedTabs)] // check safari API compat + && [controller respondsToSelector:@selector(selectTab:)]) { - NSArray *tabs = [keyWindow performSelector:@selector(orderedTabViewItems)]; + NSArray *tabs = [controller performSelector:@selector(orderedTabs)]; NSInteger newTabIndex = -1; if (tabIndex == 8) @@ -46,9 +47,9 @@ - (void)SafariTabeSwitching_sendEvent:(NSEvent *)event if (newTabIndex >= 0) { - [keyWindow performSelector:@selector(setCurrentTabViewItem:) withObject:[tabs objectAtIndex:newTabIndex]]; + [controller performSelector:@selector(selectTab:) withObject:[tabs objectAtIndex:newTabIndex]]; } - + return; // prevent event dispatching } } @@ -56,7 +57,7 @@ - (void)SafariTabeSwitching_sendEvent:(NSEvent *)event } else if (event.type == NSKeyDown && (event.modifierFlags & NSDeviceIndependentModifierFlagsMask) == (NSCommandKeyMask|NSShiftKeyMask) && event.keyCode == 0x11) { // keycode of 'T' - + CGEventRef e = CGEventCreateKeyboardEvent(NULL, 0x6, YES); // keycode of 'Z' CGEventSetFlags(e, kCGEventFlagMaskCommand); @@ -69,7 +70,7 @@ - (void)SafariTabeSwitching_sendEvent:(NSEvent *)event return; } - + [self SafariTabeSwitching_sendEvent:event]; } @@ -87,7 +88,7 @@ + (void)load { NSLog(@"Safari Tab Switching %@ Loaded", self.pluginVersion); [NSClassFromString(@"BrowserApplication") jr_swizzleMethod:@selector(sendEvent:) withMethod:@selector(SafariTabeSwitching_sendEvent:) error:NULL]; - + } @end