diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 5ae74ac5..b6b629b9 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -1510,7 +1510,9 @@ 4C77E36515B84A240093A587 /* Frameworks */, 4C77E36315B84A240093A587 /* Products */, ); + indentWidth = 2; sourceTree = ""; + tabWidth = 2; }; 4C77E36315B84A240093A587 /* Products */ = { isa = PBXGroup; diff --git a/MacPass/Base.lproj/WorkflowSettings.xib b/MacPass/Base.lproj/WorkflowSettings.xib index 73c8ef52..f04ddbf4 100644 --- a/MacPass/Base.lproj/WorkflowSettings.xib +++ b/MacPass/Base.lproj/WorkflowSettings.xib @@ -1,8 +1,8 @@ - + - + @@ -91,7 +91,7 @@ - + @@ -129,4 +129,4 @@ - \ No newline at end of file + diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index e6b4652e..50beb8ce 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -621,9 +621,17 @@ NSString *const _MPTAbleSecurCellView = @"PasswordCell"; if(!scheme) { webURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", [selectedEntry.url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]; } - [[NSWorkspace sharedWorkspace] openURL:webURL]; - /* Add custom browser support */ - //[[NSWorkspace sharedWorkspace] openURLs:@[webURL] withAppBundleIdentifier:@"org.mozilla.firefox" options:NSWorkspaceLaunchAsync additionalEventParamDescriptor:nil launchIdentifiers:NULL]; + + NSString *browserBundleID = [[NSUserDefaults standardUserDefaults] objectForKey:kMPSettingsKeyBrowserBundleId]; + BOOL launched = NO; + + if (browserBundleID) { + launched = [[NSWorkspace sharedWorkspace] openURLs:@[webURL] withAppBundleIdentifier:browserBundleID options:NSWorkspaceLaunchAsync additionalEventParamDescriptor:nil launchIdentifiers:NULL]; + } + + if (!launched) { + [[NSWorkspace sharedWorkspace] openURL:webURL]; + } } } diff --git a/MacPass/MPWorkflowSettingsController.m b/MacPass/MPWorkflowSettingsController.m index 5a15d14f..7bbdaf48 100644 --- a/MacPass/MPWorkflowSettingsController.m +++ b/MacPass/MPWorkflowSettingsController.m @@ -44,13 +44,26 @@ #pragma mark Actions - (void)selectBrowser:(id)sender { NSString *browserBundleId = [sender representedObject]; - NSLog(@"New default Browser: %@", browserBundleId); [[NSUserDefaults standardUserDefaults] setObject:browserBundleId forKey:kMPSettingsKeyBrowserBundleId]; [[NSUserDefaults standardUserDefaults] synchronize]; + [self _updateBrowserSelection]; } - (void)showCustomBrowserSelection:(id)sender { - NSAssert(NO,@"Not implemented!"); + NSOpenPanel *openPanel = [NSOpenPanel openPanel]; + [openPanel setDirectoryURL:[NSURL URLWithString:@"/Applications"]]; + [openPanel setAllowsMultipleSelection:NO]; + [openPanel setCanChooseDirectories:NO]; + [openPanel setCanChooseFiles:YES]; + [openPanel setAllowedFileTypes:@[@"app"]]; + + [openPanel beginSheetModalForWindow:[[self view] window] completionHandler:^(NSInteger result) { + if(result == NSFileHandlingPanelOKButton) { + NSMenuItem *customBrowser = [[NSMenuItem alloc] init]; + [customBrowser setRepresentedObject:[[NSBundle bundleWithPath:[[openPanel URL] path]] bundleIdentifier]]; + [self selectBrowser:customBrowser]; + } + }]; } #pragma mark Helper @@ -58,8 +71,15 @@ /* Use a delegate ? */ NSMenu *browserMenu = [[NSMenu alloc] init]; [self.browserPopup setMenu:browserMenu]; - - [browserMenu addItemWithTitle:NSLocalizedString(@"DEFAULT_BROWSER", "Default Browser") action:NULL keyEquivalent:@""]; + + NSMenuItem *defaultItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"DEFAULT_BROWSER", "Default Browser") action:@selector(selectBrowser:) keyEquivalent:@""]; + [defaultItem setRepresentedObject:nil]; + [defaultItem setTarget:self]; + [browserMenu addItem:defaultItem]; + + NSString *currentDefaultBrowser = [[NSUserDefaults standardUserDefaults] objectForKey:kMPSettingsKeyBrowserBundleId]; + NSMenuItem *selectedItem = defaultItem; + [browserMenu addItem:[NSMenuItem separatorItem]]; for(NSString *bundleIdentifier in [self _bundleIdentifierForHTTPS]) { @@ -69,16 +89,36 @@ [browserItem setRepresentedObject:bundleIdentifier]; [browserItem setTarget:self]; [browserMenu addItem:browserItem]; + + if ([bundleIdentifier isEqualToString:currentDefaultBrowser]) { + selectedItem = browserItem; + } } if([[browserMenu itemArray] count] > 2) { [browserMenu addItem:[NSMenuItem separatorItem]]; } - NSMenuItem *selectOtherBrowserItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"OTHER_BROWSER", "Selecte Browser") + + if (currentDefaultBrowser != nil && selectedItem == defaultItem) { + NSString *bundlePath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:currentDefaultBrowser]; + if (bundlePath != nil) { + NSString *browserName = [[NSFileManager defaultManager] displayNameAtPath:bundlePath]; + NSMenuItem *browserItem = [[NSMenuItem alloc] initWithTitle:browserName action:@selector(selectBrowser:) keyEquivalent:@""]; + [browserItem setRepresentedObject:currentDefaultBrowser]; + [browserItem setTarget:self]; + [browserMenu addItem:browserItem]; + + selectedItem = browserItem; + } + } + + NSMenuItem *selectOtherBrowserItem = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"OTHER_BROWSER", "Select Browser") action:@selector(showCustomBrowserSelection:) keyEquivalent:@""]; [selectOtherBrowserItem setTarget:self]; + [browserMenu addItem:selectOtherBrowserItem]; + [self.browserPopup selectItem:selectedItem]; } - (NSArray *)_bundleIdentifierForHTTPS { diff --git a/MacPass/en.lproj/Localizable.strings b/MacPass/en.lproj/Localizable.strings index 4ad1ae01..42469b17 100644 Binary files a/MacPass/en.lproj/Localizable.strings and b/MacPass/en.lproj/Localizable.strings differ