diff --git a/imgui.cpp b/imgui.cpp index fd07b676..8062ddb6 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -3519,6 +3519,10 @@ static void FocusWindow(ImGuiWindow* window) // Always mark the window we passed as focused. This is used for keyboard interactions such as tabbing. g.FocusedWindow = window; + // Passing NULL allow to disable keyboard focus + if (!window) + return; + // And move its root window to the top of the pile if (window->RootWindow) window = window->RootWindow; @@ -3903,9 +3907,16 @@ void ImGui::SetWindowFocus() void ImGui::SetWindowFocus(const char* name) { - ImGuiWindow* window = FindWindowByName(name); - if (window) - FocusWindow(window); + if (name) + { + ImGuiWindow* window = FindWindowByName(name); + if (window) + FocusWindow(window); + } + else + { + FocusWindow(NULL); + } } void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond) diff --git a/imgui.h b/imgui.h index fcda9b59..02965f73 100644 --- a/imgui.h +++ b/imgui.h @@ -191,7 +191,7 @@ namespace ImGui IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position - call within Begin()/End(). may incur tearing IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set to ImVec2(0,0) to force an auto-fit. may incur tearing IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond = 0); // set named window collapsed state - IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most + IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / front-most. use NULL to remove focus. IMGUI_API float GetScrollPosY(); // get scrolling position [0..GetScrollMaxY()] IMGUI_API float GetScrollMaxY(); // get maximum scrolling position == ContentSize.Y - WindowSize.Y