diff --git a/src/cocoa_window.m b/src/cocoa_window.m index 85dfa6363..68fcf7959 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -60,6 +60,8 @@ static void enterFullscreenMode(_GLFWwindow* window) [window->ns.view enterFullScreenMode:window->monitor->ns.screen withOptions:nil]; + + _glfwInputWindowFocus(window, GL_TRUE); } // Leave fullscreen mode @@ -1056,6 +1058,10 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) CGDisplayMoveCursorToPoint(window->monitor->ns.displayID, CGPointMake(x, y)); } + else if ([window->ns.view isInFullScreenMode]) + { + CGWarpMouseCursorPosition(CGPointMake(x, y)); + } else { const NSRect contentRect = [window->ns.view frame]; @@ -1065,6 +1071,12 @@ void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) CGWarpMouseCursorPosition(CGPointMake(globalPoint.x, transformY(globalPoint.y))); } + + if (window->cursorMode != GLFW_CURSOR_DISABLED) + { + CGAssociateMouseAndMouseCursorPosition(true); + } + setModeCursor(window, window->cursorMode); } void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) diff --git a/src/input.c b/src/input.c index 1bd7e6d8f..25170d61d 100644 --- a/src/input.c +++ b/src/input.c @@ -48,6 +48,8 @@ static void setCursorMode(_GLFWwindow* window, int newMode) oldMode = window->cursorMode; if (oldMode == newMode) return; + + window->cursorMode = newMode; if (window == _glfw.focusedWindow) { @@ -72,7 +74,6 @@ static void setCursorMode(_GLFWwindow* window, int newMode) _glfwPlatformSetCursorMode(window, newMode); } - window->cursorMode = newMode; } // Set sticky keys mode for the specified window