Ariver
2026-05-31 6f3ed4f3b8eb45734ca77916b4c96fab937cb2e2
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
    }