From 6f3ed4f3b8eb45734ca77916b4c96fab937cb2e2 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sun, 31 May 2026 02:58:27 +0800
Subject: [PATCH] Prepare 7.8.7 dock policy release

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

diff --git a/Apptag/OverlayWindowController.swift b/Apptag/OverlayWindowController.swift
index 03f74f2..1472d2e 100644
--- a/Apptag/OverlayWindowController.swift
+++ b/Apptag/OverlayWindowController.swift
@@ -2,8 +2,18 @@
 import SwiftUI
 
 final class OverlayPanel: NSPanel {
+    var handleOverlayKeyEvent: ((NSEvent) -> Bool)?
+
     override var canBecomeKey: Bool { true }
     override var canBecomeMain: Bool { true }
+
+    override func sendEvent(_ event: NSEvent) {
+        if event.type == .keyDown,
+           handleOverlayKeyEvent?(event) == true {
+            return
+        }
+        super.sendEvent(event)
+    }
 
     override func constrainFrameRect(_ frameRect: NSRect, to screen: NSScreen?) -> NSRect {
         frameRect
@@ -19,6 +29,7 @@
         let currentOverlayLevel: () -> NSWindow.Level
         let overlayLevel: (_ initialQuickSearchSource: String?) -> NSWindow.Level
         let makeContentView: (_ initialQuickSearchSource: String?) -> NSView
+        let handleOverlayKeyEvent: (NSEvent) -> Bool
         let installOverlayKeyMonitor: () -> Void
         let removeOverlayKeyMonitor: () -> Void
         let removeQuickSearchMouseMonitor: () -> Void
@@ -143,6 +154,14 @@
                 newWindow.setFrame(placementFrame, display: true)
                 self.orderFront(newWindow)
             }
+            for delay in [0.2, 0.5] {
+                DispatchQueue.main.asyncAfter(deadline: .now() + delay) { [weak self, weak newWindow] in
+                    guard let self, let newWindow, self.window === newWindow else { return }
+                    guard newWindow.frame != placementFrame else { return }
+                    newWindow.setFrame(placementFrame, display: true)
+                    self.orderFront(newWindow)
+                }
+            }
             if let settingsWindow = self.dependencies.settingsWindow(), settingsWindow.isVisible {
                 self.dependencies.prepareSettingsWindow(settingsWindow)
             }
@@ -215,6 +234,7 @@
         panel.titlebarAppearsTransparent = true
         panel.titleVisibility = .hidden
         panel.isReleasedWhenClosed = false
+        panel.handleOverlayKeyEvent = dependencies.handleOverlayKeyEvent
         panel.contentView = dependencies.makeContentView(initialQuickSearchSource)
         return panel
     }

--
Gitblit v1.9.3