From 5f7ad88e0d1f9cd2bffd28d86ee2ecef1e88e7f8 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 19 Jun 2026 21:49:07 +0800
Subject: [PATCH] Fix Apple default note localization migration
---
src/Apptag/ApptagApp.swift | 80 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 77 insertions(+), 3 deletions(-)
diff --git a/src/Apptag/ApptagApp.swift b/src/Apptag/ApptagApp.swift
index beb61cb..f0df77a 100644
--- a/src/Apptag/ApptagApp.swift
+++ b/src/Apptag/ApptagApp.swift
@@ -342,11 +342,53 @@
}
}
+ private func foregroundWindowForActivationPolicyRestore() -> NSWindow? {
+ if let settingsWindow, settingsWindow.isVisible {
+ return settingsWindow
+ }
+ if let overlayWindow, overlayWindow.isVisible {
+ return overlayWindow
+ }
+ return NSApp.keyWindow
+ }
+
+ private func setLauncherActivationPolicy(_ desiredPolicy: NSApplication.ActivationPolicy) {
+ guard NSApp.activationPolicy() != desiredPolicy else { return }
+
+ let restoreWindow = desiredPolicy == .accessory && NSApp.isActive
+ ? foregroundWindowForActivationPolicyRestore()
+ : nil
+
+ // Deactivate before switching regular -> accessory; otherwise Dock can
+ // keep a stale running tile until Dock itself restarts.
+ if desiredPolicy == .accessory && NSApp.isActive {
+ NSApp.deactivate()
+ }
+
+ NSApp.setActivationPolicy(desiredPolicy)
+
+ guard desiredPolicy == .accessory,
+ let restoreWindow,
+ restoreWindow.isVisible
+ else { return }
+
+ DispatchQueue.main.async { [weak self, weak restoreWindow] in
+ guard let self,
+ let restoreWindow,
+ restoreWindow.isVisible,
+ self.requiresForegroundOwnership
+ else { return }
+ NSApp.activate(ignoringOtherApps: true)
+ restoreWindow.makeKeyAndOrderFront(nil)
+ restoreWindow.orderFrontRegardless()
+ }
+ }
+
private func beginLauncherForegroundOwnership(activate: Bool = true, keyWindow: NSWindow? = nil) {
let showDock = UserDefaults.standard.bool(forKey: Self.showDockIconKey)
let desiredPolicy: NSApplication.ActivationPolicy = showDock ? .regular : .accessory
if NSApp.activationPolicy() != desiredPolicy {
- NSApp.setActivationPolicy(desiredPolicy)
+ setLauncherActivationPolicy(desiredPolicy)
}
if activate, showDock {
claimLauncherForeground(keyWindow: keyWindow)
@@ -363,7 +405,7 @@
overlayGeneration expectedOverlayGeneration: Int? = nil
) {
if NSApp.activationPolicy() != .regular {
- NSApp.setActivationPolicy(.regular)
+ setLauncherActivationPolicy(.regular)
}
if isOverlayVisible && !NSApp.presentationOptions.contains(.hideDock) {
@@ -425,7 +467,7 @@
? .regular
: (showDock ? .regular : .accessory))))
if NSApp.activationPolicy() != desiredPolicy {
- NSApp.setActivationPolicy(desiredPolicy)
+ setLauncherActivationPolicy(desiredPolicy)
}
let desiredPresentation: NSApplication.PresentationOptions = isOverlayVisible ? [.hideDock] : []
@@ -1751,7 +1793,13 @@
super.mouseDown(with: event)
return
}
+ if routeUsageTipsMouseDownIfNeeded(event) {
+ return
+ }
if hit == self {
+ if shouldSwallowUsageTipsBackdropClick(at: location) {
+ return
+ }
if quickSearchSuppressesBackdropDismiss {
NotificationCenter.default.post(
name: .tagLauncherQuickSearchDismissRequested,
@@ -1786,6 +1834,32 @@
super.mouseDown(with: event)
}
+ private func routeUsageTipsMouseDownIfNeeded(_ event: NSEvent) -> Bool {
+ guard let appGridHost = findAppGridCollectionHost(in: self) else { return false }
+ return appGridHost.handleUsageTipsMouseDown(event)
+ }
+
+ private func findAppGridCollectionHost(in view: NSView) -> AppGridCollectionHostView? {
+ if let host = view as? AppGridCollectionHostView {
+ return host
+ }
+ for subview in view.subviews {
+ if let host = findAppGridCollectionHost(in: subview) {
+ return host
+ }
+ }
+ return nil
+ }
+
+ private func shouldSwallowUsageTipsBackdropClick(at location: NSPoint) -> Bool {
+ guard !UserDefaults.standard.bool(forKey: "hideUsageTips") else { return false }
+ let height = min(bounds.height, AppGridUsageTipsMetrics.reservedHeight)
+ guard height > 0 else { return false }
+ let y = isFlipped ? max(0, bounds.height - height) : 0
+ let region = NSRect(x: 0, y: y, width: bounds.width, height: height)
+ return region.contains(location)
+ }
+
private func observeBackdropDismissSuppressionChanges() {
modalInteractionObserver = NotificationCenter.default.addObserver(
forName: .tagLauncherModalInteractionChanged,
--
Gitblit v1.9.3