feat: copy and paste selected emoji
This commit is contained in:
@@ -10,7 +10,8 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
ActionEntry(title: "Show in Finder", symbol: "finder", color: SunsetPalette.text),
|
||||
ActionEntry(title: "Reset ranking", symbol: "arrow.counterclockwise", color: SunsetPalette.text),
|
||||
ActionEntry(title: "Quit application", symbol: "stop.circle", color: SunsetPalette.text),
|
||||
ActionEntry(title: "Uninstall application", symbol: "trash", color: .systemRed)
|
||||
ActionEntry(title: "Uninstall application", symbol: "trash", color: .systemRed),
|
||||
ActionEntry(title: "Copy Emoji", symbol: "doc.on.doc", color: SunsetPalette.text)
|
||||
]
|
||||
private var visibleEntries: [Int] = []
|
||||
private var availableEntries = Array(0..<6)
|
||||
@@ -26,6 +27,7 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
private var transitionGeneration = 0
|
||||
private var panel: ActionsPanelView { view as! ActionsPanelView }
|
||||
var open: (() -> Void)?
|
||||
var copyEmoji: (() -> Void)?
|
||||
var toggleFavorite: (() -> Void)?
|
||||
var isFavorite = false
|
||||
var showInFinder: (() -> Void)?
|
||||
@@ -126,11 +128,11 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
|
||||
func show(for application: Application, relativeTo anchor: NSView) {
|
||||
show(title: application.name, relativeTo: anchor,
|
||||
available: application.command == nil ? Array(entries.indices) : [0, 1, 3])
|
||||
available: application.command == nil ? Array(0..<6) : [0, 1, 3])
|
||||
}
|
||||
|
||||
func showEmoji(named name: String, relativeTo anchor: NSView) {
|
||||
show(title: name, relativeTo: anchor, available: [0, 1], emoji: true)
|
||||
show(title: name, relativeTo: anchor, available: [0, 6, 1], emoji: true)
|
||||
}
|
||||
|
||||
private func show(title: String, relativeTo anchor: NSView, available: [Int], emoji: Bool = false) {
|
||||
@@ -140,8 +142,10 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
_ = view
|
||||
applicationLabel.stringValue = title
|
||||
availableEntries = available
|
||||
entries[0].button.title = emoji ? "Copy Emoji" : "Open"
|
||||
entries[0].icon.image = NSImage(systemSymbolName: emoji ? "doc.on.doc" : "arrow.up.forward.app", accessibilityDescription: nil)
|
||||
let openTitle = emoji ? "Copy and Paste" : "Open"
|
||||
entries[0].button.title = openTitle
|
||||
entries[0].button.setAccessibilityLabel(openTitle)
|
||||
entries[0].icon.image = NSImage(systemSymbolName: emoji ? "doc.on.clipboard" : "arrow.up.forward.app", accessibilityDescription: nil)
|
||||
search.setAccessibilityLabel(emoji ? "Search emoji actions" : "Search application actions")
|
||||
let favorite = entries[1]
|
||||
let favoriteTitle = isFavorite ? "Remove Favorite" : "Favorite"
|
||||
@@ -215,9 +219,8 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
|
||||
func controlTextDidChange(_ notification: Notification) {
|
||||
let query = search.stringValue.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
visibleEntries = entries.indices.filter {
|
||||
availableEntries.contains($0)
|
||||
&& (query.isEmpty || entries[$0].button.title.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil)
|
||||
visibleEntries = availableEntries.filter {
|
||||
query.isEmpty || entries[$0].button.title.range(of: query, options: [.caseInsensitive, .diacriticInsensitive]) != nil
|
||||
}
|
||||
selectedEntry = visibleEntries.first
|
||||
for index in entries.indices {
|
||||
@@ -278,6 +281,7 @@ final class ApplicationActionsController: NSViewController, NSSearchFieldDelegat
|
||||
case 3: resetRanking?()
|
||||
case 4: quit?()
|
||||
case 5: uninstall?()
|
||||
case 6: copyEmoji?()
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user