Allow SetWindowFocus(NULL) to remove focus

This commit is contained in:
ocornut 2015-04-06 11:19:31 +01:00
parent 73e2d56acc
commit fe64da6197
2 changed files with 15 additions and 4 deletions

View File

@ -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. // Always mark the window we passed as focused. This is used for keyboard interactions such as tabbing.
g.FocusedWindow = window; g.FocusedWindow = window;
// Passing NULL allow to disable keyboard focus
if (!window)
return;
// And move its root window to the top of the pile // And move its root window to the top of the pile
if (window->RootWindow) if (window->RootWindow)
window = window->RootWindow; window = window->RootWindow;
@ -3903,9 +3907,16 @@ void ImGui::SetWindowFocus()
void ImGui::SetWindowFocus(const char* name) void ImGui::SetWindowFocus(const char* name)
{ {
ImGuiWindow* window = FindWindowByName(name); if (name)
if (window) {
FocusWindow(window); ImGuiWindow* window = FindWindowByName(name);
if (window)
FocusWindow(window);
}
else
{
FocusWindow(NULL);
}
} }
void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond) void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond)

View File

@ -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 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 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 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 GetScrollPosY(); // get scrolling position [0..GetScrollMaxY()]
IMGUI_API float GetScrollMaxY(); // get maximum scrolling position == ContentSize.Y - WindowSize.Y IMGUI_API float GetScrollMaxY(); // get maximum scrolling position == ContentSize.Y - WindowSize.Y