diff --git a/App/AppDelegate.swift b/App/AppDelegate.swift index 3d76da3..1dbbfce 100644 --- a/App/AppDelegate.swift +++ b/App/AppDelegate.swift @@ -32,6 +32,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate { return UISceneConfiguration(name: "Browser", sessionRole: connectingSceneSession.role) } + private func historyMenu() -> UIMenu { + let historyItems = BrowserHistory.shared.allHistory(limit: 50).map { item in + let title = (item.title.count > 0) ? item.title : item.url.absoluteString + return UIAction(title: title) { action in + UIApplication.shared.sendAction(#selector(ShortcutResponder.handleOpenURL), to: nil, from: action, for: OpenURLEvent(url: item.url)) + } + } + + return UIMenu(title: "History", children: [ + UIKeyCommand( + modifiers: [ .command ], + input: "y", + title: "Show All History…", + action: #selector(ShortcutResponder.showHistory) + ), + + UIMenu(options: .displayInline, children: historyItems) + ]) + } + override var keyCommands: [UIKeyCommand]? { get { KeyboardShortcuts.allKeyCommands() } } @@ -68,6 +88,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Go builder.insertSibling(UIMenu(title: "Go", children: KeyboardShortcuts.menu(for: .go)), beforeMenu: .view) + // History + builder.insertSibling(historyMenu(), beforeMenu: .view) + // View builder.replaceChildren(ofMenu: .view) { children in KeyboardShortcuts.menu(for: .view) + children diff --git a/App/Browser View/BrowserViewController+Keyboard.swift b/App/Browser View/BrowserViewController+Keyboard.swift index 5ae8d04..f70cd18 100644 --- a/App/Browser View/BrowserViewController+Keyboard.swift +++ b/App/Browser View/BrowserViewController+Keyboard.swift @@ -168,13 +168,13 @@ extension BrowserViewController: ShortcutResponder showReaderWindow() } - func handleOpenURL(_ sender: Any?, url: URL?) { - guard let url else { return } + func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?) { + guard let event else { return } if tab.url == nil { - tab.beginLoadingURL(url) + tab.beginLoadingURL(event.url) } else { - createNewTab(withURL: url) + createNewTab(withURL: event.url) } } } diff --git a/App/KeyboardShortcuts.swift b/App/KeyboardShortcuts.swift index 6ff5655..85288ff 100644 --- a/App/KeyboardShortcuts.swift +++ b/App/KeyboardShortcuts.swift @@ -55,7 +55,14 @@ protocol ShortcutResponder: AnyObject { optional func showHistory(_ sender: Any?) @objc - optional func handleOpenURL(_ sender: Any?, url: URL?) + optional func handleOpenURL(_ sender: Any?, forEvent event: OpenURLEvent?) +} + +public class OpenURLEvent: UIEvent { + let url: URL + public init(url: URL) { + self.url = url + } } fileprivate extension Array { @@ -172,13 +179,6 @@ public class KeyboardShortcuts { title: "Go Forward", action: #selector(ShortcutResponder.goForward) ), - - UIKeyCommand( - modifiers: [.command, .shift], - input: "h", - title: "Show History…", - action: #selector(ShortcutResponder.showHistory) - ), ]), // Tab Navigation