fix(ui): stop the context menu crashing and give the quick buttons their tooltips back

Two things Flo hit on the first run.

The context menu threw on EndPopup. The spacing guard added in 929188e was a
`using var`, which disposes at the end of the method -- after EndPopup. ImGui
asserts when a popup closes with a style var still on its stack. The body moved
into a scoped block so the pop happens inside the popup.

The quick-button tooltips were empty boxes. SetTooltip ran inside the
FontAwesome push, and that atlas has no ASCII glyphs, so the text had nothing to
render with. ImRaii.DefaultFont did not save it. The hovered label is collected
now and drawn after the font is popped. Same trap as the unread badge in C5,
different place.

Those three tooltip strings are still hard-coded English while the rest of the
UI is localised. Pre-existing, and adding resources means touching 24 language
files, so it is noted rather than fixed here.
This commit is contained in:
2026-08-18 09:23:12 +02:00
parent ca60c851cd
commit 30c495849d
2 changed files with 29 additions and 22 deletions
+12 -16
View File
@@ -511,15 +511,17 @@ internal sealed class InputBar
private void DrawQuickButtons()
{
// Tooltip text is collected here and drawn after the icon font is popped.
// Inside the push it rendered against the FontAwesome atlas, which has no
// ASCII glyphs, so every tooltip came out as an empty box.
string? tooltip = null;
using (_fonts.FontAwesome.Push())
{
if (ImGui.Button(FontAwesomeIcon.SmileBeam.ToIconString()))
_symbolPicker.OpenPopup();
if (ImGui.IsItemHovered())
{
using (ImRaii.DefaultFont())
ImGui.SetTooltip("Insert symbol");
}
tooltip = "Insert symbol";
if (_themeQuickPicker is not null)
{
@@ -527,10 +529,7 @@ internal sealed class InputBar
if (ImGui.Button(FontAwesomeIcon.Palette.ToIconString()))
_themeQuickPicker.OpenPopup();
if (ImGui.IsItemHovered())
{
using (ImRaii.DefaultFont())
ImGui.SetTooltip(HellionStrings.Settings_QuickPicker_Tooltip);
}
tooltip = HellionStrings.Settings_QuickPicker_Tooltip;
}
ImGui.SameLine();
@@ -539,10 +538,7 @@ internal sealed class InputBar
_onOpenSettings();
}
if (ImGui.IsItemHovered())
{
using (ImRaii.DefaultFont())
ImGui.SetTooltip("Settings");
}
tooltip = "Settings";
// Hides the window (1.5.6 UserHide). One-way — Enter brings it back.
// Main window only (pop-outs have their own close); last in the row.
@@ -552,12 +548,12 @@ internal sealed class InputBar
if (ImGui.Button(FontAwesomeIcon.EyeSlash.ToIconString()))
_onHideWindow();
if (ImGui.IsItemHovered())
{
using (ImRaii.DefaultFont())
ImGui.SetTooltip("Hide chat (Enter to bring back)");
}
tooltip = "Hide chat (Enter to bring back)";
}
}
if (tooltip is not null)
ImGui.SetTooltip(tooltip);
}
// Test-only hook; do not call from production code.