From 00d66fcdb928754e5a8c69a3b4ccab7832af5b54 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Mon, 18 May 2026 20:12:20 +0800
Subject: [PATCH] Stabilize menu bar item identity for Thaw

---
 Apptag/TagGroupView.swift |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/Apptag/TagGroupView.swift b/Apptag/TagGroupView.swift
index c293236..bea1637 100644
--- a/Apptag/TagGroupView.swift
+++ b/Apptag/TagGroupView.swift
@@ -11,11 +11,16 @@
     var showNames: Bool = true
     var dragModeActive: Bool = false
     var onDragModeChange: ((Bool) -> Void)? = nil
+    var onBubbleHover: ((AppInfo, CGRect, Bool) -> Void)? = nil
+    var onEditNote: ((AppInfo, CGRect) -> Void)? = nil
+    var bubbleDisabled: Bool = false
+    @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 +57,11 @@
                         sourceTag: group.name,
                         dragModeActive: dragModeActive,
                         onDragModeChange: onDragModeChange,
+                        onBubbleHover: onBubbleHover,
+                        onEditNote: onEditNote,
+                        bubbleDisabled: bubbleDisabled,
+                        itemID: "\(group.name)|\(app.path.path)",
+                        hoveredAppItemID: $hoveredAppItemID,
                         onSelect: { onSelectApp(app) }
                     )
                 }

--
Gitblit v1.9.3