Files
Attractor/App/Browser View/BrowserViewController+Keyboard.swift

104 lines
3.0 KiB
Swift
Raw Normal View History

//
// BrowserViewController+Keyboard.swift
// App
//
// Created by James Magahern on 2/17/21.
//
import Foundation
extension BrowserViewController: ShortcutResponder
{
internal func updateCommandKeyState(forPresses presses: Set<UIPress>) {
guard let press = presses.first else { return }
if let key = press.key {
if key.modifierFlags == [.command] {
let isDown = press.phase == .began || press.phase == .changed || press.phase == .stationary
self.commandKeyHeld = isDown
}
}
}
override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
super.pressesBegan(presses, with: event)
updateCommandKeyState(forPresses: presses)
}
override func pressesCancelled(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
super.pressesCancelled(presses, with: event)
updateCommandKeyState(forPresses: presses)
}
override func pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
super.pressesEnded(presses, with: event)
updateCommandKeyState(forPresses: presses)
}
// MARK: Keyboard Shortcuts
func focusURLBar(_ sender: Any?) {
toolbarController.urlBar.textField.becomeFirstResponder()
}
func goBack(_ sender: Any?) {
tab.webView.goBack()
}
func goForward(_ sender: Any?) {
tab.webView.goForward()
}
func createTab(_ sender: Any?) {
createNewTab(withURL: nil)
}
func previousTab(_ sender: Any?) {
if let tabIndex = tabController.tabs.firstIndex(of: self.tab) {
if tabIndex - 1 >= 0 {
self.tab = tabController.tabs[tabIndex - 1]
}
}
}
func nextTab(_ sender: Any?) {
if let tabIndex = tabController.tabs.firstIndex(of: self.tab) {
if tabIndex + 1 < tabController.tabs.count {
self.tab = tabController.tabs[tabIndex + 1]
}
}
}
func closeTab(_ sender: Any?) {
if tabController.tabs.count > 1 {
tabController.closeTab(self.tab)
} else {
#if targetEnvironment(macCatalyst)
if let originWindowScene = self.view.window?.windowScene {
UIApplication.shared.requestSceneSessionDestruction(originWindowScene.session, options: nil) { error in
print("Error when requesting scene destruction: " + error.localizedDescription)
}
}
#endif
}
}
func findOnPage(_ sender: Any?) {
browserView.setFindOnPageVisible(true, animated: true)
findOnPageController.findOnPageView.textField.becomeFirstResponder()
}
func refresh(_ sender: Any?) {
webView.reload()
}
override func increaseSize(_ sender: Any?) {
tab.webView._viewScale += 0.10
}
override func decreaseSize(_ sender: Any?) {
tab.webView._viewScale -= 0.10
}
}