// // AppDelegate.swift // SBrowser // // Created by James Magahern on 7/21/20. // import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { return true } // MARK: UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { if let userActivity = options.userActivities.first { if userActivity.activityType == SessionActivityType.SettingsWindow.rawValue { return UISceneConfiguration(name: "Settings", sessionRole: connectingSceneSession.role) } } return UISceneConfiguration(name: "Browser", sessionRole: connectingSceneSession.role) } static func appMenuShortcuts() -> [UIKeyCommand] { [ // Preferences UIKeyCommand( modifiers: .command, input: ",", title: "Preferences", action: #selector(ShortcutResponder.showPreferences) ) ] } static func fileMenuShortcuts() -> [UIKeyCommand] { [ // Open Location... UIKeyCommand( modifiers: .command, input: "L", title: "Open Location", action: #selector(ShortcutResponder.focusURLBar) ), // Focus Web View UIKeyCommand( modifiers: .command, input: "e", title: "Focus Web View", action: #selector(ShortcutResponder.focusWebView) ), // Go Back UIKeyCommand( modifiers: .command, input: "[", title: "Go Back", action: #selector(ShortcutResponder.goBack) ), // Go Forward UIKeyCommand( modifiers: .command, input: "]", title: "Go Forward", action: #selector(ShortcutResponder.goForward) ), // Create Tab UIKeyCommand( modifiers: .command, input: "T", title: "New Tab", action: #selector(ShortcutResponder.createTab) ), // Previous Tab UIKeyCommand( modifiers: [.command, .shift], input: "[", title: "Previous Tab", action: #selector(ShortcutResponder.previousTab) ), // Close tab UIKeyCommand( modifiers: [.command], input: "W", title: "Close Tab", action: #selector(ShortcutResponder.closeTab) ), // Next Tab UIKeyCommand( modifiers: [.command, .shift], input: "]", title: "Next Tab", action: #selector(ShortcutResponder.nextTab) ), // Find on page UIKeyCommand( modifiers: [.command], input: "F", title: "Find on Page", action: #selector(ShortcutResponder.findOnPage) ), // Refresh UIKeyCommand( modifiers: [.command], input: "R", title: "Refresh", action: #selector(ShortcutResponder.refresh) ), // Toggle Dark Mode UIKeyCommand( modifiers: [.command], input: "M", title: "Toggle Dark Mode", action: #selector(ShortcutResponder.toggleDarkMode) ), ] } override var keyCommands: [UIKeyCommand]? { get { return Self.fileMenuShortcuts() + Self.appMenuShortcuts() } } override func buildMenu(with builder: UIMenuBuilder) { builder.replaceChildren(ofMenu: .file) { children in return Self.fileMenuShortcuts() + children } builder.remove(menu: .format) builder.replaceChildren(ofMenu: .application, from: { children in let index = children.firstIndex(where: { elem in if let elem = elem as? UIMenu { return elem.identifier == .about } return false }) var newChildren = children if let index = index { newChildren.insert(contentsOf: Self.appMenuShortcuts(), at: index + 1) } else { newChildren.append(contentsOf: Self.appMenuShortcuts()) } return newChildren }) } }