|
@@ -3542,7 +3542,6 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
|
|
|
return "Unknown";
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] RENDER HELPERS
|
|
|
// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change,
|
|
@@ -4252,7 +4251,6 @@ void ImGui::CallContextHooks(ImGuiContext* ctx, ImGuiContextHookType hook_type)
|
|
|
hook.Callback(&g, &hook);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -6957,42 +6955,6 @@ static void SetWindowActiveForSkipRefresh(ImGuiWindow* window)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// When a modal popup is open, newly created windows that want focus (i.e. are not popups and do not specify ImGuiWindowFlags_NoFocusOnAppearing)
|
|
|
-// should be positioned behind that modal window, unless the window was created inside the modal begin-stack.
|
|
|
-// In case of multiple stacked modals newly created window honors begin stack order and does not go below its own modal parent.
|
|
|
-// - WindowA // FindBlockingModal() returns Modal1
|
|
|
-// - WindowB // .. returns Modal1
|
|
|
-// - Modal1 // .. returns Modal2
|
|
|
-// - WindowC // .. returns Modal2
|
|
|
-// - WindowD // .. returns Modal2
|
|
|
-// - Modal2 // .. returns Modal2
|
|
|
-// - WindowE // .. returns NULL
|
|
|
-// Notes:
|
|
|
-// - FindBlockingModal(NULL) == NULL is generally equivalent to GetTopMostPopupModal() == NULL.
|
|
|
-// Only difference is here we check for ->Active/WasActive but it may be unnecessary.
|
|
|
-ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window)
|
|
|
-{
|
|
|
- ImGuiContext& g = *GImGui;
|
|
|
- if (g.OpenPopupStack.Size <= 0)
|
|
|
- return NULL;
|
|
|
-
|
|
|
- // Find a modal that has common parent with specified window. Specified window should be positioned behind that modal.
|
|
|
- for (ImGuiPopupData& popup_data : g.OpenPopupStack)
|
|
|
- {
|
|
|
- ImGuiWindow* popup_window = popup_data.Window;
|
|
|
- if (popup_window == NULL || !(popup_window->Flags & ImGuiWindowFlags_Modal))
|
|
|
- continue;
|
|
|
- if (!popup_window->Active && !popup_window->WasActive) // Check WasActive, because this code may run before popup renders on current frame, also check Active to handle newly created windows.
|
|
|
- continue;
|
|
|
- if (window == NULL) // FindBlockingModal(NULL) test for if FocusWindow(NULL) is naturally possible via a mouse click.
|
|
|
- return popup_window;
|
|
|
- if (IsWindowWithinBeginStackOf(window, popup_window)) // Window may be over modal
|
|
|
- continue;
|
|
|
- return popup_window; // Place window right below first block modal
|
|
|
- }
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
// Push a new Dear ImGui window to add widgets to.
|
|
|
// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair.
|
|
|
// - Begin/End can be called multiple times during the frame with the same window name to append content.
|
|
@@ -8276,14 +8238,6 @@ bool ImGui::IsWindowFocused(ImGuiFocusedFlags flags)
|
|
|
return (ref_window == cur_window);
|
|
|
}
|
|
|
|
|
|
-// Can we focus this window with CTRL+TAB (or PadMenu + PadFocusPrev/PadFocusNext)
|
|
|
-// Note that NoNavFocus makes the window not reachable with CTRL+TAB but it can still be focused with mouse or programmatically.
|
|
|
-// If you want a window to never be focused, you may use the e.g. NoInputs flag.
|
|
|
-bool ImGui::IsWindowNavFocusable(ImGuiWindow* window)
|
|
|
-{
|
|
|
- return window->WasActive && window == window->RootWindow && !(window->Flags & ImGuiWindowFlags_NoNavFocus);
|
|
|
-}
|
|
|
-
|
|
|
float ImGui::GetWindowWidth()
|
|
|
{
|
|
|
ImGuiWindow* window = GImGui->CurrentWindow;
|
|
@@ -10308,7 +10262,6 @@ bool ImGui::Shortcut(ImGuiKeyChord key_chord, ImGuiInputFlags flags, ImGuiID own
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] ERROR CHECKING, STATE RECOVERY
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -11655,6 +11608,43 @@ ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal()
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+// When a modal popup is open, newly created windows that want focus (i.e. are not popups and do not specify ImGuiWindowFlags_NoFocusOnAppearing)
|
|
|
+// should be positioned behind that modal window, unless the window was created inside the modal begin-stack.
|
|
|
+// In case of multiple stacked modals newly created window honors begin stack order and does not go below its own modal parent.
|
|
|
+// - WindowA // FindBlockingModal() returns Modal1
|
|
|
+// - WindowB // .. returns Modal1
|
|
|
+// - Modal1 // .. returns Modal2
|
|
|
+// - WindowC // .. returns Modal2
|
|
|
+// - WindowD // .. returns Modal2
|
|
|
+// - Modal2 // .. returns Modal2
|
|
|
+// - WindowE // .. returns NULL
|
|
|
+// Notes:
|
|
|
+// - FindBlockingModal(NULL) == NULL is generally equivalent to GetTopMostPopupModal() == NULL.
|
|
|
+// Only difference is here we check for ->Active/WasActive but it may be unnecessary.
|
|
|
+ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window)
|
|
|
+{
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
+ if (g.OpenPopupStack.Size <= 0)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ // Find a modal that has common parent with specified window. Specified window should be positioned behind that modal.
|
|
|
+ for (ImGuiPopupData& popup_data : g.OpenPopupStack)
|
|
|
+ {
|
|
|
+ ImGuiWindow* popup_window = popup_data.Window;
|
|
|
+ if (popup_window == NULL || !(popup_window->Flags & ImGuiWindowFlags_Modal))
|
|
|
+ continue;
|
|
|
+ if (!popup_window->Active && !popup_window->WasActive) // Check WasActive, because this code may run before popup renders on current frame, also check Active to handle newly created windows.
|
|
|
+ continue;
|
|
|
+ if (window == NULL) // FindBlockingModal(NULL) test for if FocusWindow(NULL) is naturally possible via a mouse click.
|
|
|
+ return popup_window;
|
|
|
+ if (IsWindowWithinBeginStackOf(window, popup_window)) // Window may be over modal
|
|
|
+ continue;
|
|
|
+ return popup_window; // Place window right below first block modal
|
|
|
+ }
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
void ImGui::OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
@@ -13524,6 +13514,14 @@ static int ImGui::FindWindowFocusIndex(ImGuiWindow* window)
|
|
|
return order;
|
|
|
}
|
|
|
|
|
|
+// Can we focus this window with CTRL+TAB (or PadMenu + PadFocusPrev/PadFocusNext)
|
|
|
+// Note that NoNavFocus makes the window not reachable with CTRL+TAB but it can still be focused with mouse or programmatically.
|
|
|
+// If you want a window to never be focused, you may use the e.g. NoInputs flag.
|
|
|
+bool ImGui::IsWindowNavFocusable(ImGuiWindow* window)
|
|
|
+{
|
|
|
+ return window->WasActive && window == window->RootWindow && !(window->Flags & ImGuiWindowFlags_NoNavFocus);
|
|
|
+}
|
|
|
+
|
|
|
static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int dir) // FIXME-OPT O(N)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
@@ -13801,7 +13799,6 @@ void ImGui::NavUpdateWindowingOverlay()
|
|
|
PopStyleVar();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] DRAG AND DROP
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -14410,7 +14407,6 @@ void ImGui::LogButtons()
|
|
|
LogToClipboard();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] SETTINGS
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -14770,7 +14766,6 @@ static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandl
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] LOCALIZATION
|
|
|
//-----------------------------------------------------------------------------
|
|
@@ -14782,7 +14777,6 @@ void ImGui::LocalizeRegisterEntries(const ImGuiLocEntry* entries, int count)
|
|
|
g.LocalizationTable[entries[n].Key] = entries[n].Text;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//-----------------------------------------------------------------------------
|
|
|
// [SECTION] VIEWPORTS, PLATFORM WINDOWS
|
|
|
//-----------------------------------------------------------------------------
|