|
@@ -1106,7 +1106,7 @@ CODE
|
|
|
#else
|
|
|
#include <windows.h>
|
|
|
#endif
|
|
|
-#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP || WINAPI_FAMILY == WINAPI_FAMILY_GAMES)
|
|
|
+#if defined(WINAPI_FAMILY) && ((defined(WINAPI_FAMILY_APP) && WINAPI_FAMILY == WINAPI_FAMILY_APP) || (defined(WINAPI_FAMILY_GAMES) && WINAPI_FAMILY == WINAPI_FAMILY_GAMES))
|
|
|
// The UWP and GDK Win32 API subsets don't support clipboard nor IME functions
|
|
|
#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
|
|
|
#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
|
|
@@ -1155,12 +1155,14 @@ CODE
|
|
|
#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
|
|
|
#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
|
|
|
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size
|
|
|
-#pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*'
|
|
|
+#pragma GCC diagnostic ignored "-Wfloat-equal" // warning: comparing floating-point with '==' or '!=' is unsafe
|
|
|
+#pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'int'/'void*', but argument X has type 'unsigned int'/'ImGuiWindow*'
|
|
|
#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
|
|
|
#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value
|
|
|
#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
|
|
|
#pragma GCC diagnostic ignored "-Wstrict-overflow" // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false
|
|
|
#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
|
|
|
+#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers
|
|
|
#endif
|
|
|
|
|
|
// Debug options
|
|
@@ -3954,7 +3956,8 @@ ImGuiContext::ImGuiContext(ImFontAtlas* shared_font_atlas)
|
|
|
Time = 0.0f;
|
|
|
FrameCount = 0;
|
|
|
FrameCountEnded = FrameCountPlatformEnded = FrameCountRendered = -1;
|
|
|
- WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false;
|
|
|
+ WithinEndChildID = 0;
|
|
|
+ WithinFrameScope = WithinFrameScopeWithImplicitWindow = false;
|
|
|
GcCompactAll = false;
|
|
|
TestEngineHookItems = false;
|
|
|
TestEngine = NULL;
|
|
@@ -4140,7 +4143,7 @@ ImGuiContext::ImGuiContext(ImFontAtlas* shared_font_atlas)
|
|
|
StackSizesInBeginForCurrentWindow = NULL;
|
|
|
|
|
|
DebugDrawIdConflictsCount = 0;
|
|
|
- DebugLogFlags = ImGuiDebugLogFlags_EventError | ImGuiDebugLogFlags_OutputToTTY | ImGuiDebugLogFlags_EventFont;
|
|
|
+ DebugLogFlags = ImGuiDebugLogFlags_EventError | ImGuiDebugLogFlags_OutputToTTY;
|
|
|
DebugLocateId = 0;
|
|
|
DebugLogSkippedErrors = 0;
|
|
|
DebugLogAutoDisableFlags = ImGuiDebugLogFlags_None;
|
|
@@ -6381,10 +6384,10 @@ void ImGui::EndChild()
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
ImGuiWindow* child_window = g.CurrentWindow;
|
|
|
|
|
|
- IM_ASSERT(g.WithinEndChild == false);
|
|
|
+ const ImGuiID backup_within_end_child_id = g.WithinEndChildID;
|
|
|
IM_ASSERT(child_window->Flags & ImGuiWindowFlags_ChildWindow); // Mismatched BeginChild()/EndChild() calls
|
|
|
|
|
|
- g.WithinEndChild = true;
|
|
|
+ g.WithinEndChildID = child_window->ID;
|
|
|
ImVec2 child_size = child_window->Size;
|
|
|
End();
|
|
|
if (child_window->BeginCount == 1)
|
|
@@ -6416,7 +6419,7 @@ void ImGui::EndChild()
|
|
|
if (g.HoveredWindow == child_window)
|
|
|
g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow;
|
|
|
}
|
|
|
- g.WithinEndChild = false;
|
|
|
+ g.WithinEndChildID = backup_within_end_child_id;
|
|
|
g.LogLinePosY = -FLT_MAX; // To enforce a carriage return
|
|
|
}
|
|
|
|
|
@@ -7049,9 +7052,10 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar
|
|
|
ImGuiStyle& style = g.Style;
|
|
|
ImGuiWindowFlags flags = window->Flags;
|
|
|
|
|
|
- // Ensure that ScrollBar doesn't read last frame's SkipItems
|
|
|
+ // Ensure that Scrollbar() doesn't read last frame's SkipItems
|
|
|
IM_ASSERT(window->BeginCount == 0);
|
|
|
window->SkipItems = false;
|
|
|
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
|
|
|
|
|
|
// Draw window + handle manual resize
|
|
|
// As we highlight the title bar when want_focus is set, multiple reappearing windows will have their title bar highlighted on their reappearing frame.
|
|
@@ -7186,6 +7190,7 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar
|
|
|
if (handle_borders_and_resize_grips && !window->DockNodeAsHost)
|
|
|
RenderWindowOuterBorders(window);
|
|
|
}
|
|
|
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
|
|
|
}
|
|
|
|
|
|
// When inside a dock node, this is handled in DockNodeCalcTabBarLayout() instead.
|
|
@@ -8334,7 +8339,7 @@ void ImGui::End()
|
|
|
|
|
|
// Error checking: verify that user doesn't directly call End() on a child window.
|
|
|
if ((window->Flags & ImGuiWindowFlags_ChildWindow) && !(window->Flags & ImGuiWindowFlags_DockNodeHost) && !window->DockIsActive)
|
|
|
- IM_ASSERT_USER_ERROR(g.WithinEndChild, "Must call EndChild() and not End()!");
|
|
|
+ IM_ASSERT_USER_ERROR(g.WithinEndChildID == window->ID, "Must call EndChild() and not End()!");
|
|
|
|
|
|
// Close anything that is open
|
|
|
if (window->DC.CurrentColumns)
|
|
@@ -11171,8 +11176,16 @@ void ImGui::ErrorRecoveryTryToRecoverState(const ImGuiErrorRecoveryState* state_
|
|
|
ImGuiWindow* window = g.CurrentWindow;
|
|
|
if (window->Flags & ImGuiWindowFlags_ChildWindow)
|
|
|
{
|
|
|
- IM_ASSERT_USER_ERROR(0, "Missing EndChild()");
|
|
|
- EndChild();
|
|
|
+ if (g.CurrentTable != NULL && g.CurrentTable->InnerWindow == g.CurrentWindow)
|
|
|
+ {
|
|
|
+ IM_ASSERT_USER_ERROR(0, "Missing EndTable()");
|
|
|
+ EndTable();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ IM_ASSERT_USER_ERROR(0, "Missing EndChild()");
|
|
|
+ EndChild();
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -12609,11 +12622,11 @@ void ImGui::EndPopup()
|
|
|
NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY);
|
|
|
|
|
|
// Child-popups don't need to be laid out
|
|
|
- IM_ASSERT(g.WithinEndChild == false);
|
|
|
+ const ImGuiID backup_within_end_child_id = g.WithinEndChildID;
|
|
|
if (window->Flags & ImGuiWindowFlags_ChildWindow)
|
|
|
- g.WithinEndChild = true;
|
|
|
+ g.WithinEndChildID = window->ID;
|
|
|
End();
|
|
|
- g.WithinEndChild = false;
|
|
|
+ g.WithinEndChildID = backup_within_end_child_id;
|
|
|
}
|
|
|
|
|
|
// Helper to open a popup if mouse button is released over the item
|
|
@@ -22380,7 +22393,7 @@ void ImGui::ShowDebugLogWindow(bool* p_open)
|
|
|
void ImGui::DebugTextUnformattedWithLocateItem(const char* line_begin, const char* line_end)
|
|
|
{
|
|
|
TextUnformatted(line_begin, line_end);
|
|
|
- if (!IsItemHovered())
|
|
|
+ if (!IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
|
|
|
return;
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
ImRect text_rect = g.LastItemData.Rect;
|