Skip to content
/ imgui Public
forked from ocornut/imgui

Commit

Permalink
update viewport flags from window flags every frame
Browse files Browse the repository at this point in the history
Fixes WindowFlags_NoInputs only being taken in consideration when the viewport is intially created.
  • Loading branch information
cfillion committed Jul 3, 2024
1 parent fd70ecb commit 1f9fbf0
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions imgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15313,7 +15313,6 @@ static void ImGui::UpdateViewportsEndFrame()
g.Viewports[0]->ClearRequestFlags(); // Clear main viewport flags because UpdatePlatformWindows() won't do it and may not even be called
}

// FIXME: We should ideally refactor the system to call this every frame (we currently don't)
ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const ImVec2& pos, const ImVec2& size, ImGuiViewportFlags flags)
{
ImGuiContext& g = *GImGui;
Expand All @@ -15330,7 +15329,12 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const
flags |= ImGuiViewportFlags_NoFocusOnAppearing;
}

ImGuiViewportP* viewport = (ImGuiViewportP*)FindViewportByID(id);
ImGuiViewportP* viewport;
if (window && window->Viewport && window->Viewport->ID == id)
viewport = window->Viewport;
else
viewport = (ImGuiViewportP*)FindViewportByID(id);

if (viewport)
{
// Always update for main viewport as we are already pulling correct platform pos/size (see #4900)
Expand Down Expand Up @@ -15472,18 +15476,14 @@ static void ImGui::WindowSelectViewport(ImGuiWindow* window)
{
window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_None);
}
else if (g.MovingWindow && g.MovingWindow->RootWindowDockTree == window && IsMousePosValid())
{
if (window->Viewport != NULL && window->Viewport->Window == window)
window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_None);
}
else
else if (window->Viewport && window->Viewport->Window == window)
{
window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_None);

// Merge into host viewport?
// We cannot test window->ViewportOwned as it set lower in the function.
// Testing (g.ActiveId == 0 || g.ActiveIdAllowOverlap) to avoid merging during a short-term widget interaction. Main intent was to avoid during resize (see #4212)
bool try_to_merge_into_host_viewport = (window->Viewport && window == window->Viewport->Window && (g.ActiveId == 0 || g.ActiveIdAllowOverlap));
if (try_to_merge_into_host_viewport)
if (!g.MovingWindow || g.MovingWindow->RootWindowDockTree != window || !IsMousePosValid() || g.ActiveId == 0 || g.ActiveIdAllowOverlap)
UpdateTryMergeWindowIntoHostViewports(window);
}

Expand Down

0 comments on commit 1f9fbf0

Please sign in to comment.