From c5bf354834691483ad31568871e07af4dad28622 Mon Sep 17 00:00:00 2001 From: Blocks Task Runner Date: Tue, 11 Aug 2026 08:16:21 +0000 Subject: [PATCH] SWARM-56: Fix reply preview egui widget ID collision Key reply-strip interact IDs under the child bubble push_id instead of the parent msgid alone, so two replies to the same message no longer trigger "Second use of widget ID". Restores the fix reverted by the Bluesky avatars change. (cherry picked from commit f4f2e1da2321b7f35786dcb7ccce2c621491202b) --- android/src/ui/widgets.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android/src/ui/widgets.rs b/android/src/ui/widgets.rs index 69c657a..914c3a7 100644 --- a/android/src/ui/widgets.rs +++ b/android/src/ui/widgets.rs @@ -417,7 +417,10 @@ fn touch_swipe_reply( fn reply_context_preview(ui: &mut egui::Ui, th: &Theme, parent: &ChatMessage) -> bool { let p = &th.palette; let sp = &th.spacing; - let row_id = Id::new(("reply_preview", parent.id.as_str())); + // Scope under the child bubble's `push_id` — never key only on the parent + // msgid. Absolute `Id::new(("reply_preview", parent))` collides when two + // visible messages reply to the same original (egui: "Second use of widget ID"). + let row_id = ui.id().with("reply_preview"); // Fill the bubble width so empty space beside short previews is still a hit target. let row_w = ui.available_width().max(1.0); let mut label_clicked = false; -- 2.51.2