fix: allow edit shortcuts in the search bar (closes #5308)
This commit is contained in:
1 parent
fd4e3734e8
commit
35ddbe72ed
3 files changed
+19
-3
No files matched your search
+15
-3
@@ -1,6 +1,7 @@
|
||||
class MainMenu {
|
||||
private static var mainMenu: NSMenu!
|
||||
private static var menuItemsWithShortcut = [NSMenuItem: String]()
|
||||
private static var editMenuItems = Set<NSMenuItem>()
|
||||
|
||||
/// classic keyboard shortcuts like copy-and-paste are missing without a MainMenu. We generated the default menu from XCode and load it
|
||||
/// see https://stackoverflow.com/a/3746058/2249756
|
||||
@@ -18,15 +19,26 @@ class MainMenu {
|
||||
}
|
||||
}
|
||||
|
||||
static func toggleEditMenu(_ enabled: Bool) {
|
||||
for item in editMenuItems {
|
||||
guard let keyEquivalent = menuItemsWithShortcut[item] else { continue }
|
||||
item.keyEquivalent = enabled ? keyEquivalent : ""
|
||||
}
|
||||
}
|
||||
|
||||
private static func rememberMenuItemsWithShortcut() {
|
||||
var stack: [NSMenu] = [mainMenu]
|
||||
while let menu = stack.popLast() {
|
||||
guard let items = mainMenu?.items else { return }
|
||||
let editSubmenu = items.first { $0.submenu?.title == "Edit" }?.submenu
|
||||
var stack: [(NSMenu, Bool)] = [(mainMenu, false)]
|
||||
while let (menu, isEdit) = stack.popLast() {
|
||||
let isEditMenu = isEdit || menu === editSubmenu
|
||||
for item in menu.items {
|
||||
if !item.keyEquivalent.isEmpty {
|
||||
menuItemsWithShortcut[item] = item.keyEquivalent
|
||||
if isEditMenu { editMenuItems.insert(item) }
|
||||
}
|
||||
if let submenu = item.submenu {
|
||||
stack.append(submenu)
|
||||
stack.append((submenu, isEditMenu))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,6 +128,9 @@ extension TilesPanel: NSWindowDelegate {
|
||||
// this avoids command+q from quitting AltTab itself, or command+p from printing
|
||||
DispatchQueue.main.async {
|
||||
MainMenu.toggle(false)
|
||||
if TilesView.isSearchEditing {
|
||||
MainMenu.toggleEditMenu(true)
|
||||
}
|
||||
}
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) {
|
||||
Applications.manuallyRefreshAllWindows()
|
||||
|
||||
@@ -198,6 +198,7 @@ class TilesView {
|
||||
let editable = searchMode == .editing
|
||||
searchField.isEditable = editable
|
||||
searchField.isSelectable = editable
|
||||
MainMenu.toggleEditMenu(editable)
|
||||
}
|
||||
|
||||
static func updateCachedSizes() {
|
||||
|
||||
Reference in new issue
Block a user