From c0308da665dd1553955ba340a82e0b969631c1ad Mon Sep 17 00:00:00 2001 From: ocornut Date: Wed, 29 Jan 2025 20:13:22 +0100 Subject: [PATCH 1/5] Fixed zealous GCC warning. (#8355) Amend dfd1bc3 --- imgui_tables.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imgui_tables.cpp b/imgui_tables.cpp index d5e952d8f9a1..5411e8a1b818 100644 --- a/imgui_tables.cpp +++ b/imgui_tables.cpp @@ -1052,7 +1052,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table) ImGuiTableColumn* column = &table->Columns[column_n]; // Initial nav layer: using FreezeRowsCount, NOT FreezeRowsRequest, so Header line changes layer when frozen - column->NavLayerCurrent = (ImS8)(table->FreezeRowsCount > 0 ? ImGuiNavLayer_Menu : table->NavLayer); + column->NavLayerCurrent = (ImS8)(table->FreezeRowsCount > 0 ? ImGuiNavLayer_Menu : (ImGuiNavLayer)table->NavLayer); if (offset_x_frozen && table->FreezeColumnsCount == visible_n) { From fa178f42350598f853f2ec36b5aeb231e0e08c75 Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 30 Jan 2025 14:30:14 +0100 Subject: [PATCH 2/5] Error Handling: Recovery from missing EndMenuBar() call. (#1651) --- docs/CHANGELOG.txt | 1 + imgui.cpp | 5 +++++ imgui_widgets.cpp | 9 +++++---- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index be448d16f355..99333efdabe3 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -71,6 +71,7 @@ Other changes: scrollbar when using thick border sizes. (#8267, #7887) - Windows: Fixed IsItemXXXX() functions not working on append-version of EndChild(). (#8350) Also made some of the fields accessible after BeginChild() to match Begin() logic. +- Error Handling: Recovery from missing EndMenuBar() call. (#1651) - Tables, Menus: Fixed using BeginTable() in menu layer (any menu bar). (#8355) It previously overrode the current layer back to main layer, which caused an issue with MainMenuBar attempted to release focus when leaving the menu layer. diff --git a/imgui.cpp b/imgui.cpp index 5223ed76c892..dffd37b45f08 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -10301,6 +10301,11 @@ void ImGui::ErrorRecoveryTryToRecoverWindowState(const ImGuiErrorRecoveryStat IM_ASSERT_USER_ERROR(0, "Missing EndMultiSelect()"); EndMultiSelect(); } + if (window->DC.MenuBarAppending) //-V1044 + { + IM_ASSERT_USER_ERROR(0, "Missing EndMenuBar()"); + EndMenuBar(); + } while (window->DC.TreeDepth > state_in->SizeOfTreeStack) //-V1044 { IM_ASSERT_USER_ERROR(0, "Missing TreePop()"); diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index dccb7a5356da..9335da9fd0d3 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -8657,6 +8657,10 @@ void ImGui::EndMenuBar() return; ImGuiContext& g = *GImGui; + IM_MSVC_WARNING_SUPPRESS(6011); // Static Analysis false positive "warning C6011: Dereferencing NULL pointer 'window'" + IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar); + IM_ASSERT(window->DC.MenuBarAppending); + // Nav: When a move request within one of our child menu failed, capture the request to navigate among our siblings. if (NavMoveRequestButNoResultYet() && (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right) && (g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu)) { @@ -8683,9 +8687,6 @@ void ImGui::EndMenuBar() } } - IM_MSVC_WARNING_SUPPRESS(6011); // Static Analysis false positive "warning C6011: Dereferencing NULL pointer 'window'" - IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar); - IM_ASSERT(window->DC.MenuBarAppending); PopClipRect(); PopID(); window->DC.MenuBarOffset.x = window->DC.CursorPos.x - window->Pos.x; // Save horizontal position so next append can reuse it. This is kinda equivalent to a per-layer CursorPos. @@ -8764,11 +8765,11 @@ bool ImGui::BeginMainMenuBar() void ImGui::EndMainMenuBar() { + ImGuiContext& g = *GImGui; EndMenuBar(); // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window // FIXME: With this strategy we won't be able to restore a NULL focus. - ImGuiContext& g = *GImGui; if (g.CurrentWindow == g.NavWindow && g.NavLayer == ImGuiNavLayer_Main && !g.NavAnyRequest && g.ActiveId == 0) FocusTopMostWindowUnderOne(g.NavWindow, NULL, NULL, ImGuiFocusRequestFlags_UnlessBelowModal | ImGuiFocusRequestFlags_RestoreFocusedChild); From ae6cfd32a0372f5ac4bec3ae304e78746d7fca23 Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 30 Jan 2025 14:34:05 +0100 Subject: [PATCH 3/5] Tables, Menus: Fixed tables or child windows submitted inside BeginMainMenuBar() being unable to save their settings. (#8356) Amend error handling (fa178f4) to avoid us setting ImGuiWindowFlags_NoSavedSettings on the wrong window. --- docs/CHANGELOG.txt | 2 ++ imgui_widgets.cpp | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 99333efdabe3..c07fcf766af7 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -75,6 +75,8 @@ Other changes: - Tables, Menus: Fixed using BeginTable() in menu layer (any menu bar). (#8355) It previously overrode the current layer back to main layer, which caused an issue with MainMenuBar attempted to release focus when leaving the menu layer. +- Tables, Menus: Fixed tables or child windows submitted inside BeginMainMenuBar() + being unable to save their settings, as the main menu bar uses _NoSavedSettings. (#8356) - ColorEdit, ColorPicker: Fixed alpha preview broken in 1.91.7. (#8336, #8241). [@PathogenDavid] - Tabs, Style: reworked selected overline rendering to better accommodate for rounded tabs. Reduced default thickness (style.TabBarOverlineSize), diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index 9335da9fd0d3..0981b447e033 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -8755,18 +8755,29 @@ bool ImGui::BeginMainMenuBar() float height = GetFrameHeight(); bool is_open = BeginViewportSideBar("##MainMenuBar", viewport, ImGuiDir_Up, height, window_flags); g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f); - - if (is_open) - BeginMenuBar(); - else + if (!is_open) + { End(); + return false; + } + + // Temporarily disable _NoSavedSettings, in the off-chance that tables or child windows submitted within the menu-bar may want to use settings. (#8356) + g.CurrentWindow->Flags &= ~ImGuiWindowFlags_NoSavedSettings; + BeginMenuBar(); return is_open; } void ImGui::EndMainMenuBar() { ImGuiContext& g = *GImGui; + if (!g.CurrentWindow->DC.MenuBarAppending) + { + IM_ASSERT_USER_ERROR(0, "Calling EndMainMenuBar() not from a menu-bar!"); // Not technically testing that it is the main menu bar + return; + } + EndMenuBar(); + g.CurrentWindow->Flags |= ImGuiWindowFlags_NoSavedSettings; // Restore _NoSavedSettings (#8356) // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window // FIXME: With this strategy we won't be able to restore a NULL focus. From e6c5296f30a5111fa1dc926d2c15abd0f809fbb1 Mon Sep 17 00:00:00 2001 From: Konstantin Podsvirov Date: Fri, 31 Jan 2025 16:11:33 +0300 Subject: [PATCH 4/5] Examples: SDL3: Fix for Emscripten platform (#8363) --- examples/example_sdl3_opengl3/main.cpp | 1 - examples/example_sdl3_sdlrenderer3/main.cpp | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/example_sdl3_opengl3/main.cpp b/examples/example_sdl3_opengl3/main.cpp index 5520a7da9293..8cd54bd4ef68 100644 --- a/examples/example_sdl3_opengl3/main.cpp +++ b/examples/example_sdl3_opengl3/main.cpp @@ -18,7 +18,6 @@ #include #endif -// This example doesn't compile with Emscripten yet! Awaiting SDL3 support. #ifdef __EMSCRIPTEN__ #include "../libs/emscripten/emscripten_mainloop_stub.h" #endif diff --git a/examples/example_sdl3_sdlrenderer3/main.cpp b/examples/example_sdl3_sdlrenderer3/main.cpp index 4b9b86e9bd5a..483350fcb47a 100644 --- a/examples/example_sdl3_sdlrenderer3/main.cpp +++ b/examples/example_sdl3_sdlrenderer3/main.cpp @@ -21,6 +21,10 @@ #include #endif +#ifdef __EMSCRIPTEN__ +#include "../libs/emscripten/emscripten_mainloop_stub.h" +#endif + // Main code int main(int, char**) { From dbb5eeaadffb6a3ba6a60de1290312e5802dba5a Mon Sep 17 00:00:00 2001 From: ocornut Date: Fri, 31 Jan 2025 15:57:48 +0100 Subject: [PATCH 5/5] Version 1.91.8 --- docs/CHANGELOG.txt | 11 ++++++----- imgui.cpp | 2 +- imgui.h | 6 +++--- imgui_demo.cpp | 2 +- imgui_draw.cpp | 2 +- imgui_internal.h | 2 +- imgui_tables.cpp | 2 +- imgui_widgets.cpp | 2 +- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index c07fcf766af7..eaedb9c1be0c 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -36,12 +36,15 @@ HOW TO UPDATE? - Please report any issue! ----------------------------------------------------------------------- - VERSION 1.91.8 WIP (In Progress) + VERSION 1.91.8 (Released 2025-01-31) ----------------------------------------------------------------------- +Decorated log and release notes: https://github.com/ocornut/imgui/releases/tag/v1.91.8 + Breaking changes: -- ColorEdit, ColorPicker: redesigned how alpha is displayed in the preview square. (#8335, #1578, #346) +- ColorEdit, ColorPicker: redesigned how alpha is displayed in the preview + square. (#8335, #1578, #346) - Removed ImGuiColorEditFlags_AlphaPreview (made value 0): it is now the default behavior. - Prior to 1.91.8: alpha was made opaque in the preview by default _unless_ using ImGuiColorEditFlags_AlphaPreview. - We now display the preview as transparent by default. You can use ImGuiColorEditFlags_AlphaOpaque to use old behavior. @@ -63,7 +66,7 @@ Other changes: by introducing a delay. This is a very rarely used UI idiom, but some apps use this: e.g. MS Explorer single-click on an icon triggers a rename. Generally use with 'delay >= io.MouseDoubleClickTime' + combine with a - 'io.MouseClickedLastCount == 1' check. + 'GetMouseClickedCount() == 1' check. - Windows: legacy SetWindowFontScale() is properly inherited by nested child windows. Note that an upcoming major release should make this obsolete, but in the meanwhile it works better now. (#2701, #8138, #1018) @@ -81,7 +84,6 @@ Other changes: - Tabs, Style: reworked selected overline rendering to better accommodate for rounded tabs. Reduced default thickness (style.TabBarOverlineSize), increased default rounding (style.TabRounding). (#8334) [@Kian738, @ocornut] - styles as the current look is not right (but ImGuiCol_TabSelectedOverline stays the same). - Debug Tools: Tweaked font preview. - ImDrawList: texture baked storage for thick line reduced from ~64x64 to ~32x32. (#3245) - Fonts: IndexLookup[] table hold 16-bit values even in ImWchar32 mode, @@ -90,7 +92,6 @@ Other changes: - Fonts: OversampleH/OversampleV defaults to 0 for automatic selection. - OversampleH == 0 --> use 1 or 2 depending on font size and use of PixelSnapH. - OversampleV == 0 --> always use 1. - This also - ImFontAtlas: made calling ClearFonts() call ClearInputData(), as calling one without the other is never correct. (#8174, #6556, #6336, #4723) - Examples: DirectX12: Reduced number of frame in flight from 3 to 2 in diff --git a/imgui.cpp b/imgui.cpp index dffd37b45f08..5ca57dfc65b3 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (main code and documentation) // Help: diff --git a/imgui.h b/imgui.h index 7d2f333349a4..7b037a584027 100644 --- a/imgui.h +++ b/imgui.h @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (headers) // Help: @@ -28,8 +28,8 @@ // Library Version // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345') -#define IMGUI_VERSION "1.91.8 WIP" -#define IMGUI_VERSION_NUM 19174 +#define IMGUI_VERSION "1.91.8" +#define IMGUI_VERSION_NUM 19180 #define IMGUI_HAS_TABLE /* diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 43344f3fc543..03ce4710adc8 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (demo code) // Help: diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 4b59d6775867..e426f0e5dc67 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (drawing and font code) /* diff --git a/imgui_internal.h b/imgui_internal.h index d4154dabaae2..af52d0feae3c 100644 --- a/imgui_internal.h +++ b/imgui_internal.h @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (internal structures/api) // You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility. diff --git a/imgui_tables.cpp b/imgui_tables.cpp index 5411e8a1b818..e7a3b8e8d191 100644 --- a/imgui_tables.cpp +++ b/imgui_tables.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (tables and columns code) /* diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp index 0981b447e033..1e4297fcbd67 100644 --- a/imgui_widgets.cpp +++ b/imgui_widgets.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.91.8 WIP +// dear imgui, v1.91.8 // (widgets code) /*