RangeSelect/MultiSelect: Box-Select: fix preventing focus. amend determination of scope_hovered for decorated/non-child windows + avoid stealing NavId. (7424)
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 034862f..8d3f49e 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -7262,7 +7262,8 @@
 
     // Clear selection when clicking void?
     // 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))
         scope_hovered &= scope_rect.Contains(g.IO.MousePos);
     if (scope_hovered && g.HoveredId == 0 && g.ActiveId == 0)
@@ -7270,10 +7271,13 @@
         if (ms->Flags & ImGuiMultiSelectFlags_BoxSelect)
         {
             if (!g.BoxSelectState.IsActive && !g.BoxSelectState.IsStarting && g.IO.MouseClickedCount[0] == 1)
+            {
                 BoxSelectStartDrag(ms->BoxSelectId, ImGuiSelectionUserData_Invalid);
-            SetHoveredID(ms->BoxSelectId);
-            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 outside to box-select.
+                FocusWindow(window, ImGuiFocusRequestFlags_UnlessBelowModal);
+                SetHoveredID(ms->BoxSelectId);
+                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)