Popups & Modals: fixed nested Begin() being erroneously input-inhibited. (useful for e.g. #718, #4461 and probably other things)

This commit is contained in:
ocornut 2022-09-16 22:08:11 +02:00
parent 472f8013bd
commit 440f257688
3 changed files with 14 additions and 5 deletions

View File

@ -84,6 +84,9 @@ Breaking changes:
Other Changes: Other Changes:
- Popups & Modals: fixed nested Begin() being erroneously input-inhibited. While it is
unusual, you can nest a Begin() inside a popup or modal, it is occasionally useful to
achieve certains things (e.g. some ways to implement suggestion popup #718, #4461).
- InputText: added experimental io.ConfigInputTextEnterKeepActive feature to make pressing - InputText: added experimental io.ConfigInputTextEnterKeepActive feature to make pressing
Enter keep the input active and select all text. Enter keep the input active and select all text.
- InputText: numerical fields automatically accept full-width characters (U+FF01..U+FF5E) - InputText: numerical fields automatically accept full-width characters (U+FF01..U+FF5E)

View File

@ -3539,11 +3539,17 @@ static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFla
if (focused_root_window->WasActive && focused_root_window != window->RootWindow) if (focused_root_window->WasActive && focused_root_window != window->RootWindow)
{ {
// For the purpose of those flags we differentiate "standard popup" from "modal popup" // For the purpose of those flags we differentiate "standard popup" from "modal popup"
// NB: The order of those two tests is important because Modal windows are also Popups. // NB: The 'else' is important because Modal windows are also Popups.
bool want_inhibit = false;
if (focused_root_window->Flags & ImGuiWindowFlags_Modal) if (focused_root_window->Flags & ImGuiWindowFlags_Modal)
return false; want_inhibit = true;
if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup)) else if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup))
return false; want_inhibit = true;
// Inhibit hover unless the window is within the stack of our modal/popup
if (want_inhibit)
if (!ImGui::IsWindowWithinBeginStackOf(window->RootWindow, focused_root_window))
return false;
} }
return true; return true;
} }

View File

@ -23,7 +23,7 @@
// Library Version // Library Version
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM > 12345') // (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM > 12345')
#define IMGUI_VERSION "1.89 WIP" #define IMGUI_VERSION "1.89 WIP"
#define IMGUI_VERSION_NUM 18819 #define IMGUI_VERSION_NUM 18820
#define IMGUI_HAS_TABLE #define IMGUI_HAS_TABLE
/* /*