fix(payload-handler): popup-pfad in MessageList-Child-Scope verschieben
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.
This commit is contained in:
@@ -27,10 +27,6 @@ internal sealed class MessageList
|
|||||||
_handler = handler;
|
_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)
|
public MessageList(FontManager fonts, ChunkRenderer chunkRenderer)
|
||||||
{
|
{
|
||||||
_fonts = fonts;
|
_fonts = fonts;
|
||||||
@@ -63,6 +59,9 @@ internal sealed class MessageList
|
|||||||
|
|
||||||
if (pinnedToBottom)
|
if (pinnedToBottom)
|
||||||
ImGui.SetScrollHereY(1f);
|
ImGui.SetScrollHereY(1f);
|
||||||
|
|
||||||
|
// OpenPopup in Click() and BeginPopup here share the ##hellion-main-area scope -> Popup-ID matches.
|
||||||
|
_handler?.Draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawCompact(IReadOnlyList<Message> messages)
|
private void DrawCompact(IReadOnlyList<Message> messages)
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ internal sealed class MainWindow : Window
|
|||||||
DrawBody();
|
DrawBody();
|
||||||
}
|
}
|
||||||
|
|
||||||
_messages.DrawHandlerPopups();
|
|
||||||
_status.Draw(_activeTab);
|
_status.Draw(_activeTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user