From 6dea81ebd24bcdb3c62ff8d2251a2670cb8b64c5 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sun, 07 Jun 2026 01:13:34 +0800
Subject: [PATCH] Freeze TagLauncher 7.8.15 source recovery

---
 Apptag/OverlayWindowController.swift |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/Apptag/OverlayWindowController.swift b/Apptag/OverlayWindowController.swift
index 1472d2e..5ca9317 100644
--- a/Apptag/OverlayWindowController.swift
+++ b/Apptag/OverlayWindowController.swift
@@ -130,6 +130,7 @@
             initialQuickSearchSource: initialQuickSearchSource
         )
         generation &+= 1
+        let showGeneration = generation
         window = newWindow
         dependencies.installOverlayKeyMonitor()
         if shouldStageAsAccessory {
@@ -149,6 +150,7 @@
         let placementFrame = placement.frame
         let finishForegroundClaim: () -> Void = { [weak self, weak newWindow] in
             guard let self, let newWindow, self.window === newWindow else { return }
+            guard self.generation == showGeneration, newWindow.isVisible else { return }
             self.dependencies.refreshChromeState(!shouldAvoidSpaceSwitch, shouldAvoidSpaceSwitch)
             if newWindow.frame != placementFrame {
                 newWindow.setFrame(placementFrame, display: true)
@@ -157,6 +159,7 @@
             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 self.generation == showGeneration, newWindow.isVisible else { return }
                     guard newWindow.frame != placementFrame else { return }
                     newWindow.setFrame(placementFrame, display: true)
                     self.orderFront(newWindow)
@@ -182,15 +185,20 @@
         if let settingsWindow = dependencies.settingsWindow(), settingsWindow.parent == window {
             dependencies.detachSettingsWindow(settingsWindow)
         }
-        window?.orderOut(nil)
+        let windowToHide = window
+        windowToHide?.ignoresMouseEvents = true
+        windowToHide?.alphaValue = 0
+        windowToHide?.orderOut(nil)
         dependencies.removeOverlayKeyMonitor()
         dependencies.removeQuickSearchMouseMonitor()
+        windowToHide?.contentView = nil
+        windowToHide?.close()
+        if window === windowToHide {
+            window = nil
+        }
         avoidsSpaceSwitch = false
         dependencies.refreshChromeState(false, false)
         dependencies.onDidHide()
-        if discardWindow {
-            window = nil
-        }
     }
 
     func screenUnderMouse() -> NSScreen? {

--
Gitblit v1.9.3