diff --git a/MacPass/MPSettingsTab.h b/MacPass/MPSettingsTab.h index beae2616..c897ec4f 100644 --- a/MacPass/MPSettingsTab.h +++ b/MacPass/MPSettingsTab.h @@ -20,5 +20,9 @@ @optional - (NSString *)label; - (NSImage *)image; +/* Called when the tab is about to be selected and displayed */ +- (void)willSelectTab; +/* Called whent the tab was selected and is being displayed */ +- (void)didSelectTab; @end diff --git a/MacPass/MPSettingsWindowController.m b/MacPass/MPSettingsWindowController.m index b88f345e..92267300 100644 --- a/MacPass/MPSettingsWindowController.m +++ b/MacPass/MPSettingsWindowController.m @@ -59,6 +59,9 @@ NSLog(@"Warning. Unknow settingscontroller for identifier: %@. Did you miss to add the controller?", identifier); return; } + if([tab respondsToSelector:@selector(willSelectTab)]) { + [tab willSelectTab]; + } [self.toolbar setSelectedItemIdentifier:identifier]; if([tab respondsToSelector:@selector(label)]) { [[self window] setTitle:[tab label]]; @@ -83,6 +86,9 @@ views:NSDictionaryOfVariableBindings(tabView)]]; [contentView layoutSubtreeIfNeeded]; + if([tab respondsToSelector:@selector(didSelectTab)]) { + [tab didSelectTab]; + } [[self window] makeKeyAndOrderFront:[self window]]; } diff --git a/MacPass/MPWorkflowSettingsController.h b/MacPass/MPWorkflowSettingsController.h index 0100ef61..c56cfede 100644 --- a/MacPass/MPWorkflowSettingsController.h +++ b/MacPass/MPWorkflowSettingsController.h @@ -10,6 +10,9 @@ #import "MPSettingsTab.h" @interface MPWorkflowSettingsController : MPViewController + @property (weak) IBOutlet NSPopUpButton *browserPopup; +- (IBAction)showCustomBrowserSelection:(id)sender; + @end diff --git a/MacPass/MPWorkflowSettingsController.m b/MacPass/MPWorkflowSettingsController.m index caa6e609..a91e3041 100644 --- a/MacPass/MPWorkflowSettingsController.m +++ b/MacPass/MPWorkflowSettingsController.m @@ -10,10 +10,6 @@ #import "MPSettingsHelper.h" -NSString *const kMPChromeBundleId = @"com.google.chrome"; -NSString *const kMPSafariBundleId = @"com.apple.safari"; -NSString *const kMPFirefoxBundleId = @"org.mozilla.firefox"; - @interface MPWorkflowSettingsController () @end @@ -26,30 +22,8 @@ NSString *const kMPFirefoxBundleId = @"org.mozilla.firefox"; return self; } -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - } - - return self; -} - - (void)didLoadView { - NSMenu *browserMenu = [[NSMenu alloc] init]; - [browserMenu addItemWithTitle:NSLocalizedString(@"DEFAULT_BROWSER", "Default Browser") action:NULL keyEquivalent:@""]; - [browserMenu addItem:[NSMenuItem separatorItem]]; - - NSArray *browser = @[kMPChromeBundleId, kMPSafariBundleId, kMPFirefoxBundleId]; - for(NSString *bundle in browser) { - - } - - if([[browserMenu itemArray] count] > 2) { - [browserMenu addItem:[NSMenuItem separatorItem]]; - } - [browserMenu addItemWithTitle:NSLocalizedString(@"OTHER_BROWSER", "Selecte Browser") action:NULL keyEquivalent:@""]; - - [self.browserPopup setMenu:browserMenu]; + [self _updateBrowserSelection]; } #pragma mark MPSettingsTab Protocol @@ -65,21 +39,53 @@ NSString *const kMPFirefoxBundleId = @"org.mozilla.firefox"; return NSLocalizedString(@"WORKFLOW_SETTINGS", ""); } +- (void)willSelectTab { + [self _updateBrowserSelection]; +} + #pragma mark Actions -- (IBAction)selectBrowser:(id)sender { +- (void)selectBrowser:(id)sender { NSString *browserBundleId = [sender representedObject]; NSLog(@"New default Browser: %@", browserBundleId); [[NSUserDefaults standardUserDefaults] setObject:browserBundleId forKey:kMPSettingsKeyBrowserBundleId]; [[NSUserDefaults standardUserDefaults] synchronize]; } +- (void)showCustomBrowserSelection:(id)sender { + NSAssert(NO,@"Not implemented!"); +} + #pragma mark Helper -- (NSArray *)_availableBrowser { - NSArray *browser = @[kMPChromeBundleId, kMPSafariBundleId, kMPFirefoxBundleId]; - for(NSString *bundle in browser) { - +- (void)_updateBrowserSelection { + /* Use a delegate ? */ + NSMenu *browserMenu = [[NSMenu alloc] init]; + [self.browserPopup setMenu:browserMenu]; + + [browserMenu addItemWithTitle:NSLocalizedString(@"DEFAULT_BROWSER", "Default Browser") action:NULL keyEquivalent:@""]; + [browserMenu addItem:[NSMenuItem separatorItem]]; + + for(NSString *bundleIdentifier in [self _bundleIdentifierForHTTPS]) { + NSString *bundlePath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:bundleIdentifier]; + NSString *browserName = [[NSFileManager defaultManager] displayNameAtPath:bundlePath]; + NSMenuItem *browserItem = [[NSMenuItem alloc] initWithTitle:browserName action:@selector(selectBrowser:) keyEquivalent:@""]; + [browserItem setRepresentedObject:bundleIdentifier]; + [browserItem setTarget:self]; + [browserMenu addItem:browserItem]; } - return nil; + + if([[browserMenu itemArray] count] > 2) { + [browserMenu addItem:[NSMenuItem separatorItem]]; + } + NSMenuItem *selectOtherBrowserItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"OTHER_BROWSER", "Selecte Browser") + action:@selector(showCustomBrowserSelection:) + keyEquivalent:@""]; + [selectOtherBrowserItem setTarget:self]; + [browserMenu addItem:selectOtherBrowserItem]; +} + +- (NSArray *)_bundleIdentifierForHTTPS { + NSArray *browserBundles = CFBridgingRelease(LSCopyAllHandlersForURLScheme(CFSTR("https"))); + return browserBundles; } @end diff --git a/MacPass/WorkflowSettings.xib b/MacPass/WorkflowSettings.xib index 4d8b77c2..b5690622 100644 --- a/MacPass/WorkflowSettings.xib +++ b/MacPass/WorkflowSettings.xib @@ -1,5 +1,5 @@ - +