From 43640e6e65fc798d7702531fa2189affc4a046df Mon Sep 17 00:00:00 2001
From: Ariver <ar@MacBook-Air.local>
Date: Sun, 10 May 2026 19:36:04 +0800
Subject: [PATCH] Improve fullscreen overlay space handling
---
Apptag/ApptagApp.swift | 71 ++++++++++++++++++-----------------
1 files changed, 36 insertions(+), 35 deletions(-)
diff --git a/Apptag/ApptagApp.swift b/Apptag/ApptagApp.swift
index f3f3948..1bf3836 100644
--- a/Apptag/ApptagApp.swift
+++ b/Apptag/ApptagApp.swift
@@ -216,41 +216,10 @@
NSMouseInRect(mousePoint, $0.frame, false)
}) ?? NSScreen.main ?? NSScreen.screens.first else { return }
- if overlayWindow == nil {
- let panel = OverlayPanel(
- contentRect: screen.frame,
- styleMask: [.borderless, .fullSizeContentView, .nonactivatingPanel],
- backing: .buffered,
- defer: false
- )
- panel.isFloatingPanel = true
- panel.hidesOnDeactivate = false
- overlayWindow = panel
- overlayWindow?.collectionBehavior = [
- .canJoinAllSpaces,
- .fullScreenAuxiliary,
- .stationary,
- .transient,
- .ignoresCycle
- ]
- overlayWindow?.isOpaque = false
- overlayWindow?.backgroundColor = .clear
- overlayWindow?.hasShadow = false
- overlayWindow?.titlebarAppearsTransparent = true
- overlayWindow?.titleVisibility = .hidden
- overlayWindow?.isReleasedWhenClosed = false
-
- overlayWindow?.contentView = DismissibleHostingView(
- rootView: ContentView(hideOverlay: { [weak self] in
- self?.hideOverlay()
- }),
- onBackdropTap: { [weak self] in
- self?.hideOverlay()
- }
- )
- }
+ overlayWindow?.orderOut(nil)
+ overlayWindow = makeOverlayWindow(on: screen)
overlayWindow?.setFrame(screen.frame, display: true)
- overlayWindow?.level = .screenSaver
+ overlayWindow?.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(.maximumWindow)))
// Local key monitor: catch Escape while overlay is up
NSEvent.addLocalMonitorForEvents(matching: .keyDown) { [weak self] event in
@@ -263,7 +232,39 @@
overlayWindow?.makeKeyAndOrderFront(nil)
overlayWindow?.orderFrontRegardless()
- NSApp.activate(ignoringOtherApps: true)
+ }
+
+ private func makeOverlayWindow(on screen: NSScreen) -> NSWindow {
+ let panel = OverlayPanel(
+ contentRect: screen.frame,
+ styleMask: [.borderless, .fullSizeContentView, .nonactivatingPanel],
+ backing: .buffered,
+ defer: false
+ )
+ panel.isFloatingPanel = true
+ panel.hidesOnDeactivate = false
+ panel.collectionBehavior = [
+ .moveToActiveSpace,
+ .fullScreenAuxiliary,
+ .stationary,
+ .transient,
+ .ignoresCycle
+ ]
+ panel.isOpaque = false
+ panel.backgroundColor = .clear
+ panel.hasShadow = false
+ panel.titlebarAppearsTransparent = true
+ panel.titleVisibility = .hidden
+ panel.isReleasedWhenClosed = false
+ panel.contentView = DismissibleHostingView(
+ rootView: ContentView(hideOverlay: { [weak self] in
+ self?.hideOverlay()
+ }),
+ onBackdropTap: { [weak self] in
+ self?.hideOverlay()
+ }
+ )
+ return panel
}
private func hideOverlay() {
--
Gitblit v1.9.3