From b954a19b67fc4c98a6f9be8e94362038fdb20b8c Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Thu, 28 May 2026 15:25:05 +0200 Subject: [PATCH] fix(payload-handler): popup-pfad in MessageList-Child-Scope verschieben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seit dem v1.7.0-Components-Layer-Refactor lebte der PayloadHandler- Popup-Render in MainWindow.Draw als _messages.DrawHandlerPopups()- Aufruf nach dem ##hellion-body-Child-Close. ImGui.OpenPopup (in RightClickPayload, innerhalb ##hellion-main-area-Child) und ImGui.BeginPopup (in PayloadHandler.DrawPopups, im MainWindow-Root nach Child-Close) hashed die Popup-ID per g.CurrentWindow->GetID(...) window-relativ — also unterschiedlich. OpenPopupStack-Eintrag wurde nie gefunden, popup.Success blieb false, _popup wurde auf null zurückgesetzt. Alle vier Popup-Switch-Cases waren tot: URL-Rechtsklick, Player, Item (inkl. EventItem-Subpfad), Status. Fix nach v1.5.6/ChatTwo-Pattern: _handler?.Draw() ans Ende von MessageList.Draw() verschieben. MessageList läuft im ##hellion-main-area-Scope und öffnet selbst kein Child, also teilen OpenPopup und BeginPopup denselben Window-Stack. ID-Hash matched, Popup rendert. DrawHandlerPopups-Wrapper aus MessageList und der Aufruf in MainWindow.Draw entfallen — kein toter Code mehr (grep DrawHandlerPopups: 0 Treffer). Hypothese verifiziert gegen imgui.h:845 + imgui.cpp:12282+12528 (beide BeginPopup-Hash und OpenPopup-Hash sind window-relativ), v1.5.6 ChatLogWindow.cs:1667 (handler.Draw im ##chat2-messages-Child), ChatTwo ChatLog.Window.cs:620 (identisches Pattern). Reader-Lock auf tab.Messages bleibt während DrawPopups gehalten — identisch zu v1.5.6-Semantik. Verifiziert in-game (Flo): Linksklick auf URL öffnet Browser direkt (v1.5.6-konform), Rechtsklick öffnet wieder das Kontext-Popup. dotnet build clean, dotnet csharpier check clean. Plan-Runde 1 dieses Cycles (4-LOC-Reroute LeftClick → RightClickPayload) wurde verworfen weil empirischer Test zeigte dass auch Rechtsklick broken war — der Reroute hätte das Symptom nur sichtbarer gemacht ohne die Root-Cause zu adressieren. --- HellionChat/Ui/Components/MessageList.cs | 7 +++---- HellionChat/Ui/Windows/MainWindow.cs | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/HellionChat/Ui/Components/MessageList.cs b/HellionChat/Ui/Components/MessageList.cs index f12bf55..786354b 100644 --- a/HellionChat/Ui/Components/MessageList.cs +++ b/HellionChat/Ui/Components/MessageList.cs @@ -27,10 +27,6 @@ internal sealed class MessageList _handler = handler; } - // Delegates to PayloadHandler.Draw for per-frame popup tick; PayloadHandler.Draw doesn't auto-fire - // so MainWindow's draw loop must invoke it explicitly to render right-click context popups. - internal void DrawHandlerPopups() => _handler?.Draw(); - public MessageList(FontManager fonts, ChunkRenderer chunkRenderer) { _fonts = fonts; @@ -63,6 +59,9 @@ internal sealed class MessageList if (pinnedToBottom) ImGui.SetScrollHereY(1f); + + // OpenPopup in Click() and BeginPopup here share the ##hellion-main-area scope -> Popup-ID matches. + _handler?.Draw(); } private void DrawCompact(IReadOnlyList messages) diff --git a/HellionChat/Ui/Windows/MainWindow.cs b/HellionChat/Ui/Windows/MainWindow.cs index d81bfe3..5fcd4da 100644 --- a/HellionChat/Ui/Windows/MainWindow.cs +++ b/HellionChat/Ui/Windows/MainWindow.cs @@ -113,7 +113,6 @@ internal sealed class MainWindow : Window DrawBody(); } - _messages.DrawHandlerPopups(); _status.Draw(_activeTab); }