|
@@ -3582,8 +3582,9 @@ void ImGui::StartMouseMovingWindow(ImGuiWindow* window)
|
|
|
FocusWindow(window);
|
|
|
SetActiveID(window->MoveId, window);
|
|
|
g.NavDisableHighlight = true;
|
|
|
- g.ActiveIdNoClearOnFocusLoss = true;
|
|
|
g.ActiveIdClickOffset = g.IO.MouseClickedPos[0] - window->RootWindowDockTree->Pos;
|
|
|
+ g.ActiveIdNoClearOnFocusLoss = true;
|
|
|
+ SetActiveIdUsingNavAndKeys();
|
|
|
|
|
|
bool can_move_window = true;
|
|
|
if ((window->Flags & ImGuiWindowFlags_NoMove) || (window->RootWindowDockTree->Flags & ImGuiWindowFlags_NoMove))
|
|
@@ -3665,8 +3666,8 @@ void ImGui::UpdateMouseMovingWindowNewFrame()
|
|
|
// Clear the NoInput window flag set by the Viewport system
|
|
|
moving_window->Viewport->Flags &= ~ImGuiViewportFlags_NoInputs; // FIXME-VIEWPORT: Test engine managed to crash here because Viewport was NULL.
|
|
|
|
|
|
- ClearActiveID();
|
|
|
g.MovingWindow = NULL;
|
|
|
+ ClearActiveID();
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -5213,6 +5214,16 @@ void ImGui::SetItemUsingMouseWheel()
|
|
|
g.ActiveIdUsingMouseWheel = true;
|
|
|
}
|
|
|
|
|
|
+void ImGui::SetActiveIdUsingNavAndKeys()
|
|
|
+{
|
|
|
+ ImGuiContext& g = *GImGui;
|
|
|
+ IM_ASSERT(g.ActiveId != 0);
|
|
|
+ g.ActiveIdUsingNavDirMask = ~(ImU32)0;
|
|
|
+ g.ActiveIdUsingNavInputMask = ~(ImU32)0;
|
|
|
+ g.ActiveIdUsingKeyInputMask = ~(ImU64)0;
|
|
|
+ NavMoveRequestCancel();
|
|
|
+}
|
|
|
+
|
|
|
ImVec2 ImGui::GetItemRectMin()
|
|
|
{
|
|
|
ImGuiWindow* window = GetCurrentWindowRead();
|
|
@@ -10571,10 +10582,8 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
|
|
|
source_parent_id = window->IDStack.back();
|
|
|
source_drag_active = IsMouseDragging(mouse_button);
|
|
|
|
|
|
- // Disable navigation and key inputs while dragging
|
|
|
- g.ActiveIdUsingNavDirMask = ~(ImU32)0;
|
|
|
- g.ActiveIdUsingNavInputMask = ~(ImU32)0;
|
|
|
- g.ActiveIdUsingKeyInputMask = ~(ImU64)0;
|
|
|
+ // Disable navigation and key inputs while dragging + cancel existing request if any
|
|
|
+ SetActiveIdUsingNavAndKeys();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -16524,6 +16533,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
Indent();
|
|
|
Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, input_source_names[g.ActiveIdSource]);
|
|
|
Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL");
|
|
|
+ Text("ActiveIdUsing: Wheel: %d, NavDirMask: %X, NavInputMask: %X, KeyInputMask: %X", g.ActiveIdUsingMouseWheel, g.ActiveIdUsingNavDirMask, g.ActiveIdUsingNavInputMask, g.ActiveIdUsingKeyInputMask);
|
|
|
Text("HoveredId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d", g.HoveredId, g.HoveredIdPreviousFrame, g.HoveredIdTimer, g.HoveredIdAllowOverlap); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
|
|
|
Text("DragDrop: %d, SourceId = 0x%08X, Payload \"%s\" (%d bytes)", g.DragDropActive, g.DragDropPayload.SourceId, g.DragDropPayload.DataType, g.DragDropPayload.DataSize);
|
|
|
Unindent();
|