From 554dce57269e2ae24f5de9c39972cacbc0a350dc Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Tue, 19 May 2026 03:03:21 +0800
Subject: [PATCH] Fix stale app hover bubbles
---
Apptag/AppGridItem.swift | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/Apptag/AppGridItem.swift b/Apptag/AppGridItem.swift
index 72dc1fb..746d384 100644
--- a/Apptag/AppGridItem.swift
+++ b/Apptag/AppGridItem.swift
@@ -10,7 +10,7 @@
var sourceTag: String? = nil
var dragModeActive: Bool = false
var onDragModeChange: ((Bool) -> Void)? = nil
- var onBubbleHover: ((AppInfo, CGRect, Bool) -> Void)? = nil
+ var onBubbleHover: ((AppInfo, CGRect, AppBubbleHoverEvent) -> Void)? = nil
var onEditNote: ((AppInfo, CGRect) -> Void)? = nil
var bubbleDisabled: Bool = false
var itemID: String
@@ -75,16 +75,15 @@
interactionFrame = frame
if bubbleDisabled || dragModeActive {
setHoverState(false)
- onBubbleHover?(app, frame, false)
+ onBubbleHover?(app, frame, .exited)
return
}
if hovering {
setHoverState(true)
- guard shouldShowAppBubble else { return }
- onBubbleHover?(app, frame, hovering)
+ onBubbleHover?(app, frame, .entered(canShowBubble: shouldShowAppBubble))
} else if isHovered {
setHoverState(false)
- onBubbleHover?(app, frame, hovering)
+ onBubbleHover?(app, frame, .exited)
} else {
setHoverState(false)
}
@@ -102,19 +101,19 @@
.onChange(of: dragModeActive) { _, active in
if active {
setHoverState(false)
- onBubbleHover?(app, interactionFrame, false)
+ onBubbleHover?(app, interactionFrame, .exited)
}
}
.onChange(of: bubbleDisabled) { _, disabled in
if disabled {
setHoverState(false)
- onBubbleHover?(app, interactionFrame, false)
+ onBubbleHover?(app, interactionFrame, .exited)
}
}
.onDisappear {
if hoveredAppItemID == itemID {
hoveredAppItemID = nil
- onBubbleHover?(app, interactionFrame, false)
+ onBubbleHover?(app, interactionFrame, .exited)
}
}
}
@@ -138,6 +137,11 @@
}
}
+enum AppBubbleHoverEvent {
+ case entered(canShowBubble: Bool)
+ case exited
+}
+
private struct AppGridItemHoverTracker: NSViewRepresentable {
let onHover: (Bool, CGRect) -> Void
--
Gitblit v1.9.3