KeyboardShortcuts: Better organization

This commit is contained in:
James Magahern
2022-05-09 14:37:41 -07:00
parent 5d56b40128
commit ab2ff98f37
2 changed files with 180 additions and 100 deletions

View File

@@ -28,113 +28,20 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
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
(FindOnPageViewController.isEnabled() ?
UIKeyCommand(
modifiers: [.command], input: "F",
title: "Find on Page",
action: #selector(ShortcutResponder.findOnPage)
)
: UIKeyCommand.null()
),
// 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() }
get { KeyboardShortcuts.allKeyCommands() }
}
override func buildMenu(with builder: UIMenuBuilder) {
// File
builder.replaceChildren(ofMenu: .file) { children in
return Self.fileMenuShortcuts() + children
return KeyboardShortcuts.menu(for: .file) + children
}
// X Format X
builder.remove(menu: .format)
// Application
builder.replaceChildren(ofMenu: .application, from: { children in
let index = children.firstIndex(where: { elem in
if let elem = elem as? UIMenu {
@@ -144,14 +51,23 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
})
var newChildren = children
let shortcuts = KeyboardShortcuts.menu(for: .application)
if let index = index {
newChildren.insert(contentsOf: Self.appMenuShortcuts(), at: index + 1)
newChildren.insert(contentsOf: shortcuts, at: index + 1)
} else {
newChildren.append(contentsOf: Self.appMenuShortcuts())
newChildren.append(contentsOf: shortcuts)
}
return newChildren
})
// Go
builder.insertSibling(UIMenu(title: "Go", children: KeyboardShortcuts.menu(for: .go)), beforeMenu: .view)
// View
builder.replaceChildren(ofMenu: .view) { children in
KeyboardShortcuts.menu(for: .view) + children
}
}
}