From 8eb22ea6203f2653c317670277d4b9604cbae068 Mon Sep 17 00:00:00 2001 From: ocornut Date: Wed, 10 Sep 2025 22:39:17 +0200 Subject: [PATCH] Demo: ShowStyleSelector(), ShowFontSelector(): remove ImGuiSelectableFlags_NoAutoClosePopups for now. In this situation we kinda want keyboard Enter to select and close but ideally not click. We don't have separate options yet. --- imgui.cpp | 2 +- imgui_demo.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/imgui.cpp b/imgui.cpp index f5f018c84..13c011ca9 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -17875,7 +17875,7 @@ void ImGui::ShowFontSelector(const char* label) for (ImFont* font : io.Fonts->Fonts) { PushID((void*)font); - if (Selectable(font->GetDebugName(), font == font_current, ImGuiSelectableFlags_SelectOnNav | ImGuiSelectableFlags_NoAutoClosePopups)) + if (Selectable(font->GetDebugName(), font == font_current, ImGuiSelectableFlags_SelectOnNav)) io.FontDefault = font; if (font == font_current) SetItemDefaultFocus(); diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 8950e814e..26641f6b5 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -8224,17 +8224,18 @@ void ImGui::ShowAboutWindow(bool* p_open) //----------------------------------------------------------------------------- // Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options. -// Here we use the simplified Combo() api that packs items into a single literal string. -// Useful for quick combo boxes where the choices are known locally. bool ImGui::ShowStyleSelector(const char* label) { + // FIXME: This is a bit tricky to get right as style are functions, they don't register a name nor the fact that one is active. + // So we keep track of last active one among our limited selection. static int style_idx = -1; const char* style_names[] = { "Dark", "Light", "Classic" }; bool ret = false; if (ImGui::BeginCombo(label, (style_idx >= 0 && style_idx < IM_ARRAYSIZE(style_names)) ? style_names[style_idx] : "")) { for (int n = 0; n < IM_ARRAYSIZE(style_names); n++) - if (ImGui::Selectable(style_names[n], style_idx == n, ImGuiSelectableFlags_SelectOnNav | ImGuiSelectableFlags_NoAutoClosePopups)) + { + if (ImGui::Selectable(style_names[n], style_idx == n, ImGuiSelectableFlags_SelectOnNav)) { style_idx = n; ret = true; @@ -8245,6 +8246,9 @@ bool ImGui::ShowStyleSelector(const char* label) case 2: ImGui::StyleColorsClassic(); break; } } + else if (style_idx == n) + ImGui::SetItemDefaultFocus(); + } ImGui::EndCombo(); } return ret;