From 75881f7d8e152fffc123745470187798e29eb7f2 Mon Sep 17 00:00:00 2001
From: Ariver <ar@MacBook-Air.local>
Date: Sun, 10 May 2026 22:44:17 +0800
Subject: [PATCH] Add colored container display mode

---
 Apptag/ApptagApp.swift |   33 +++++++++++++++++++++++----------
 1 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/Apptag/ApptagApp.swift b/Apptag/ApptagApp.swift
index 5220d06..ed8885a 100644
--- a/Apptag/ApptagApp.swift
+++ b/Apptag/ApptagApp.swift
@@ -345,19 +345,26 @@
 
             // Settings/Preferences window → float it above overlay for real-time preview
             if NSApp.windows.contains(keyWindow) {
-                if self.overlayWindow?.isVisible == true {
-                    keyWindow.level = .popUpMenu
-                }
-                if self.settingsWindow == nil {
-                    keyWindow.minSize = NSSize(width: 660, height: 380)
-                    keyWindow.maxSize = NSSize(width: 660, height: CGFloat.greatestFiniteMagnitude)
-                }
-                self.settingsWindow = keyWindow
+                self.prepareSettingsWindow(keyWindow)
                 return
             }
 
             self.hideOverlay()
         }
+    }
+
+    /// Settings must always float above the overlay so changes can be previewed live.
+    private func prepareSettingsWindow(_ window: NSWindow) {
+        if overlayWindow?.isVisible == true {
+            let overlayLevel = overlayWindow?.level.rawValue ?? NSWindow.Level.screenSaver.rawValue
+            window.level = NSWindow.Level(rawValue: overlayLevel + 1)
+            window.orderFrontRegardless()
+        }
+        if settingsWindow == nil {
+            window.minSize = NSSize(width: 660, height: 380)
+            window.maxSize = NSSize(width: 660, height: CGFloat.greatestFiniteMagnitude)
+        }
+        settingsWindow = window
     }
 
     /// Clean up settingsWindow reference when the Settings window closes.
@@ -388,8 +395,13 @@
 
     @objc private func openPreferences() {
         // Don't hide overlay — keep it visible for real-time setting preview.
-        // observeOtherWindows handles raising the Settings window above the overlay.
         NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil)
+        DispatchQueue.main.async { [weak self] in
+            guard let self else { return }
+            for window in NSApp.windows where window != self.overlayWindow {
+                self.prepareSettingsWindow(window)
+            }
+        }
     }
 
     @objc private func switchLanguage(_ sender: NSMenuItem) {
@@ -577,9 +589,10 @@
                             Picker("", selection: $displayMode) {
                                 Text(tr("settings.flat")).tag("flat")
                                 Text(tr("settings.container")).tag("container")
+                                Text(tr("settings.coloredContainer")).tag("coloredContainer")
                             }
                             .pickerStyle(.segmented)
-                            .frame(width: 280, alignment: .leading)
+                            .frame(width: 360, alignment: .leading)
                             Text(tr("settings.flatDesc"))
                                 .font(.caption).foregroundStyle(.secondary)
                                 .fixedSize(horizontal: false, vertical: true)

--
Gitblit v1.9.3