Decouple Win32 cursor setting and tracking

This commit is contained in:
Camilla Berglund 2015-07-07 12:02:10 +02:00
parent 527952102a
commit 0a1225d0df

View File

@ -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)
return;
if (window->cursorMode != GLFW_CURSOR_NORMAL)
return;
if (!GetCursorPos(&pos))
return;
if (WindowFromPoint(pos) != window->win32.handle)
return;
if (_glfw.cursorWindow == window &&
window->cursorMode == GLFW_CURSOR_NORMAL &&
window->win32.cursorTracked)
{
if (cursor)
SetCursor(cursor->win32.handle);
else
SetCursor(LoadCursorW(NULL, IDC_ARROW));
}
}
void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string)