MultiSelect: Box-Select: fix preventing focus. amend determination of scope_hovered for decorated/non-child windows + avoid stealing NavId. (#7424)
This commit is contained in:
+8
-4
@@ -7435,7 +7435,8 @@ ImGuiMultiSelectIO* ImGui::EndMultiSelect()
|
|||||||
|
|
||||||
// Clear selection when clicking void?
|
// Clear selection when clicking void?
|
||||||
// We specifically test for IsMouseDragPastThreshold(0) == false to allow box-selection!
|
// We specifically test for IsMouseDragPastThreshold(0) == false to allow box-selection!
|
||||||
bool scope_hovered = IsWindowHovered();
|
// The InnerRect test is necessary for non-child/decorated windows.
|
||||||
|
bool scope_hovered = IsWindowHovered() && window->InnerRect.Contains(g.IO.MousePos);
|
||||||
if (scope_hovered && (ms->Flags & ImGuiMultiSelectFlags_ScopeRect))
|
if (scope_hovered && (ms->Flags & ImGuiMultiSelectFlags_ScopeRect))
|
||||||
scope_hovered &= scope_rect.Contains(g.IO.MousePos);
|
scope_hovered &= scope_rect.Contains(g.IO.MousePos);
|
||||||
if (scope_hovered && g.HoveredId == 0 && g.ActiveId == 0)
|
if (scope_hovered && g.HoveredId == 0 && g.ActiveId == 0)
|
||||||
@@ -7443,10 +7444,13 @@ ImGuiMultiSelectIO* ImGui::EndMultiSelect()
|
|||||||
if (ms->Flags & ImGuiMultiSelectFlags_BoxSelect)
|
if (ms->Flags & ImGuiMultiSelectFlags_BoxSelect)
|
||||||
{
|
{
|
||||||
if (!g.BoxSelectState.IsActive && !g.BoxSelectState.IsStarting && g.IO.MouseClickedCount[0] == 1)
|
if (!g.BoxSelectState.IsActive && !g.BoxSelectState.IsStarting && g.IO.MouseClickedCount[0] == 1)
|
||||||
|
{
|
||||||
BoxSelectStartDrag(ms->BoxSelectId, ImGuiSelectionUserData_Invalid);
|
BoxSelectStartDrag(ms->BoxSelectId, ImGuiSelectionUserData_Invalid);
|
||||||
SetHoveredID(ms->BoxSelectId);
|
FocusWindow(window, ImGuiFocusRequestFlags_UnlessBelowModal);
|
||||||
if (ms->Flags & ImGuiMultiSelectFlags_ScopeRect)
|
SetHoveredID(ms->BoxSelectId);
|
||||||
SetNavID(0, ImGuiNavLayer_Main, ms->FocusScopeId, ImRect(g.IO.MousePos, g.IO.MousePos)); // Automatically switch FocusScope for initial click from outside to box-select.
|
if (ms->Flags & ImGuiMultiSelectFlags_ScopeRect)
|
||||||
|
SetNavID(0, ImGuiNavLayer_Main, ms->FocusScopeId, ImRect(g.IO.MousePos, g.IO.MousePos)); // Automatically switch FocusScope for initial click from void to box-select.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ms->Flags & ImGuiMultiSelectFlags_ClearOnClickVoid)
|
if (ms->Flags & ImGuiMultiSelectFlags_ClearOnClickVoid)
|
||||||
|
|||||||
Reference in New Issue
Block a user