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/TagGroupView.swift |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/Apptag/TagGroupView.swift b/Apptag/TagGroupView.swift
index c293236..3220b93 100644
--- a/Apptag/TagGroupView.swift
+++ b/Apptag/TagGroupView.swift
@@ -11,11 +11,17 @@
     var showNames: Bool = true
     var dragModeActive: Bool = false
     var onDragModeChange: ((Bool) -> Void)? = nil
+    var onBubbleHover: ((AppInfo, CGRect, AppBubbleHoverEvent) -> Void)? = nil
+    var onEditNote: ((AppInfo, CGRect) -> Void)? = nil
+    var bubbleDisabled: Bool = false
+    var dragResetToken: Int = 0
+    @Binding var hoveredAppItemID: String?
     var onDropApp: ((String, String, Bool) -> Void)? = nil
 
     /// Adaptive columns — auto-fit based on icon size and available width.
     private var columns: [GridItem] {
-        [GridItem(.adaptive(minimum: iconSize + 28, maximum: iconSize + 64), spacing: 6)]
+        let itemWidth = AppGridItem.stableWidth(iconSize: iconSize)
+        return [GridItem(.adaptive(minimum: itemWidth, maximum: itemWidth + 36), spacing: 6)]
     }
 
     // Subtle separator line color — adapts to light/dark mode
@@ -52,6 +58,12 @@
                         sourceTag: group.name,
                         dragModeActive: dragModeActive,
                         onDragModeChange: onDragModeChange,
+                        onBubbleHover: onBubbleHover,
+                        onEditNote: onEditNote,
+                        bubbleDisabled: bubbleDisabled,
+                        itemID: "\(group.name)|\(app.path.path)",
+                        dragResetToken: dragResetToken,
+                        hoveredAppItemID: $hoveredAppItemID,
                         onSelect: { onSelectApp(app) }
                     )
                 }

--
Gitblit v1.9.3