diff --git a/src/win32_window.c b/src/win32_window.c index 8e65b450..7d44a1b2 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -1190,19 +1190,24 @@ void _glfwPlatformDestroyCursor(_GLFWcursor* cursor) void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor) { - // It should be guaranteed that the cursor is not being used by this window if - // the following condition is not met. That way it should be safe to destroy the - // cursor after calling glfwSetCursor(window, NULL) on all windows using the cursor. + POINT pos; - if (_glfw.cursorWindow == window && - window->cursorMode == GLFW_CURSOR_NORMAL && - window->win32.cursorTracked) - { - if (cursor) - SetCursor(cursor->win32.handle); - else - SetCursor(LoadCursorW(NULL, IDC_ARROW)); - } + if (_glfw.cursorWindow != window) + return; + + if (window->cursorMode != GLFW_CURSOR_NORMAL) + return; + + if (!GetCursorPos(&pos)) + return; + + if (WindowFromPoint(pos) != window->win32.handle) + return; + + if (cursor) + SetCursor(cursor->win32.handle); + else + SetCursor(LoadCursorW(NULL, IDC_ARROW)); } void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string)