From 561541e7b46a6aa52ca8570b2cc32db19b0d64e6 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 28 May 2026 18:48:35 +0800
Subject: [PATCH] Consolidate app grid interaction state

---
 Apptag/QuickSearch.swift |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/Apptag/QuickSearch.swift b/Apptag/QuickSearch.swift
index d53f79d..140861f 100644
--- a/Apptag/QuickSearch.swift
+++ b/Apptag/QuickSearch.swift
@@ -965,6 +965,7 @@
         field.placeholderString = placeholder
         field.delegate = context.coordinator
         field.onCommand = onCommand
+        context.coordinator.onCommand = onCommand
         field.setAccessibilityLabel(tr("quickSearch.inputAccessibility"))
         context.coordinator.field = field
         requestFocus(field)
@@ -977,6 +978,7 @@
         }
         field.placeholderString = placeholder
         field.onCommand = onCommand
+        context.coordinator.onCommand = onCommand
         if context.coordinator.lastFocusToken != focusToken {
             context.coordinator.lastFocusToken = focusToken
             requestFocus(field)
@@ -999,6 +1001,7 @@
     final class Coordinator: NSObject, NSTextFieldDelegate {
         var text: Binding<String>
         var lastFocusToken = 0
+        var onCommand: ((QuickSearchCommand) -> Void)?
         weak var field: NSTextField?
 
         init(text: Binding<String>) {
@@ -1009,6 +1012,28 @@
             guard let field = obj.object as? NSTextField else { return }
             text.wrappedValue = field.stringValue
         }
+
+        func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
+            switch commandSelector {
+            case #selector(NSResponder.moveUp(_:)):
+                onCommand?(.moveUp)
+                return true
+            case #selector(NSResponder.moveDown(_:)):
+                onCommand?(.moveDown)
+                return true
+            case #selector(NSResponder.insertNewline(_:)):
+                onCommand?(.submit)
+                return true
+            case #selector(NSResponder.insertNewlineIgnoringFieldEditor(_:)):
+                onCommand?(.submit)
+                return true
+            case #selector(NSResponder.cancelOperation(_:)):
+                onCommand?(.dismiss)
+                return true
+            default:
+                return false
+            }
+        }
     }
 }
 

--
Gitblit v1.9.3