Skip to content

Commit 0de88a9

Browse files
committed
Added ImGuiItemFlags_AutoClosePopups as a replacement for internal's ImGuiItemFlags_SelectableDontClosePopup. (#1379, #1468, #2200, #4936, #5216, #7302, #7573)
1 parent b4ca869 commit 0de88a9

File tree

6 files changed

+20
-8
lines changed

6 files changed

+20
-8
lines changed

docs/CHANGELOG.txt

+7-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ Breaking changes:
5353
- ImGuiModFlags_Ctrl -> ImGuiMod_Ctrl, ImGuiModFlags_Shift -> ImGuiMod_Shift etc.
5454
- Backends: GLFW+Emscripten: Renamed ImGui_ImplGlfw_InstallEmscriptenCanvasResizeCallback() to
5555
ImGui_ImplGlfw_InstallEmscriptenCallbacks(), with additional GLFWWindow* parameter. (#7647) [@ypujante]
56+
- Internals: changed/inverted ImGuiItemFlags_SelectableDontClosePopup (default==false) to
57+
ImGuiItemFlags_AutoClosePopups (default==true), same logic, only inverted behavior.
58+
(#1379, #2200, #4936, #5216, #7302)
5659

5760
Other changes:
5861

@@ -65,7 +68,10 @@ Other changes:
6568
- Added ImGuiItemFlags_NoNav to disable any navigation and focus of items. (#787)
6669
- Added ImGuiItemFlags_NoNavDefaultFocus to disable item being default focus. (#787)
6770
- Added ImGuiItemFlags_ButtonRepeat to enable repeat on any button-like behavior.
68-
- (previously in imgui_internal.h)
71+
- Added ImGuiItemFlags_AutoClosePopups to disable menu items/selection auto closing parent popups.
72+
Disabling this was previously possible for Selectable() via a direct flag but not for MenuItem().
73+
(#1379, #1468, #2200, #4936, #5216, #7302, #7573)
74+
- This was mostly all previously in imgui_internal.h.
6975
- Debug Tools: Added IMGUI_DEBUG_LOG(), ImGui::DebugLog() in public API. (#5855)
7076
Debug log entries add a imgui frame counter prefix + are redirected to ShowDebugLogWindow() and
7177
other configurable locations. Always call IMGUI_DEBUG_LOG() for maximum stripping in caller code.

imgui.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -4903,7 +4903,8 @@ void ImGui::NewFrame()
49034903
g.CurrentWindowStack.resize(0);
49044904
g.BeginPopupStack.resize(0);
49054905
g.ItemFlagsStack.resize(0);
4906-
g.ItemFlagsStack.push_back(ImGuiItemFlags_None);
4906+
g.ItemFlagsStack.push_back(ImGuiItemFlags_AutoClosePopups); // Default flags
4907+
g.CurrentItemFlags = g.ItemFlagsStack.back();
49074908
g.GroupStack.resize(0);
49084909

49094910
// [DEBUG] Update debug features

imgui.h

+1
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,7 @@ enum ImGuiItemFlags_
10981098
ImGuiItemFlags_NoNav = 1 << 1, // false // Disable any form of focusing (keyboard/gamepad directional navigation and SetKeyboardFocusHere() calls).
10991099
ImGuiItemFlags_NoNavDefaultFocus = 1 << 2, // false // Disable item being a candidate for default focus (e.g. used by title bar items).
11001100
ImGuiItemFlags_ButtonRepeat = 1 << 3, // false // Any button-like behavior will have repeat mode enabled (based on io.KeyRepeatDelay and io.KeyRepeatRate values). Note that you can also call IsItemActive() after any button to tell if it is being held.
1101+
ImGuiItemFlags_AutoClosePopups = 1 << 4, // true // MenuItem()/Selectable() automatically close their parent popup window.
11011102
};
11021103

11031104
// Flags for ImGui::InputText()

imgui_internal.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -846,15 +846,19 @@ enum ImGuiItemFlagsPrivate_
846846
{
847847
// Controlled by user
848848
ImGuiItemFlags_Disabled = 1 << 10, // false // Disable interactions (DOES NOT affect visuals, see BeginDisabled()/EndDisabled() for full disable feature, and github #211).
849-
ImGuiItemFlags_SelectableDontClosePopup = 1 << 11, // false // Disable MenuItem/Selectable() automatically closing their popup window
849+
ImGuiItemFlags_ReadOnly = 1 << 11, // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
850850
ImGuiItemFlags_MixedValue = 1 << 12, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
851-
ImGuiItemFlags_ReadOnly = 1 << 13, // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
852-
ImGuiItemFlags_NoWindowHoverableCheck = 1 << 14, // false // Disable hoverable check in ItemHoverable()
853-
ImGuiItemFlags_AllowOverlap = 1 << 15, // false // Allow being overlapped by another widget. Not-hovered to Hovered transition deferred by a frame.
851+
ImGuiItemFlags_NoWindowHoverableCheck = 1 << 13, // false // Disable hoverable check in ItemHoverable()
852+
ImGuiItemFlags_AllowOverlap = 1 << 14, // false // Allow being overlapped by another widget. Not-hovered to Hovered transition deferred by a frame.
854853

855854
// Controlled by widget code
856855
ImGuiItemFlags_Inputable = 1 << 20, // false // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature.
857856
ImGuiItemFlags_HasSelectionUserData = 1 << 21, // false // Set by SetNextItemSelectionUserData()
857+
858+
ImGuiItemFlags_Default_ = ImGuiItemFlags_AutoClosePopups, // Please don't change, use PushItemFlag() instead.
859+
860+
// Obsolete
861+
//ImGuiItemFlags_SelectableDontClosePopup = !ImGuiItemFlags_AutoClosePopups, // Can't have a redirect as we inverted the behavior
858862
};
859863

860864
// Status flags for an already submitted item

imgui_tables.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3471,7 +3471,7 @@ void ImGui::TableDrawDefaultContextMenu(ImGuiTable* table, ImGuiTableFlags flags
34713471
Separator();
34723472
want_separator = true;
34733473

3474-
PushItemFlag(ImGuiItemFlags_SelectableDontClosePopup, true);
3474+
PushItemFlag(ImGuiItemFlags_AutoClosePopups, false);
34753475
for (int other_column_n = 0; other_column_n < table->ColumnsCount; other_column_n++)
34763476
{
34773477
ImGuiTableColumn* other_column = &table->Columns[other_column_n];

imgui_widgets.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -6831,7 +6831,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
68316831
RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb);
68326832

68336833
// Automatically close popups
6834-
if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(g.LastItemData.InFlags & ImGuiItemFlags_SelectableDontClosePopup))
6834+
if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && (g.LastItemData.InFlags & ImGuiItemFlags_AutoClosePopups))
68356835
CloseCurrentPopup();
68366836

68376837
if (disabled_item && !disabled_global)

0 commit comments

Comments
 (0)