Misc: Stop moving window if mouse position becomes invalid. Flagged menus are _NoMove for sanity.
This commit is contained in:
parent
d317d90610
commit
711a63befc
@ -3272,13 +3272,13 @@ static void ImGui::UpdateMovingWindow()
|
||||
KeepAliveID(g.ActiveId);
|
||||
IM_ASSERT(g.MovingWindow && g.MovingWindow->RootWindow);
|
||||
ImGuiWindow* moving_window = g.MovingWindow->RootWindow;
|
||||
if (g.IO.MouseDown[0])
|
||||
if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos))
|
||||
{
|
||||
ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset;
|
||||
if (moving_window->Pos.x != pos.x || moving_window->Pos.y != pos.y)
|
||||
{
|
||||
MarkIniSettingsDirty(moving_window);
|
||||
moving_window->Pos = pos;
|
||||
SetWindowPos(moving_window, pos, ImGuiCond_Always);
|
||||
}
|
||||
FocusWindow(g.MovingWindow);
|
||||
}
|
||||
@ -11381,7 +11381,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
|
||||
{
|
||||
// Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu)
|
||||
SetNextWindowPos(popup_pos, ImGuiCond_Always);
|
||||
ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu);
|
||||
ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu);
|
||||
menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user