From e480c76a115cd3b693f4f888cdf8557f3b3e0011 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Mon, 29 Dec 2014 19:00:53 +0100 Subject: [PATCH] Removed use of cursor rectangles. Poor use of cursor rectangles broke Lion full screen and led to rect reset loop. Cursor image is now updated only with the existing enter/exit detection NSTrackingArea. Fixes #339. Fixes #375. --- src/cocoa_window.m | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/src/cocoa_window.m b/src/cocoa_window.m index 2f393243..b752da49 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -64,30 +64,19 @@ static void centerCursor(_GLFWwindow *window) _glfwPlatformSetCursorPos(window, width / 2.0, height / 2.0); } -// Get the cursor object that window uses in the specified cursor mode -// -static NSCursor* getModeCursor(_GLFWwindow* window) -{ - if (window->cursorMode == GLFW_CURSOR_NORMAL) - { - if (window->cursor) - return (NSCursor*) window->cursor->ns.object; - else - return [NSCursor arrowCursor]; - } - else - return (NSCursor*) _glfw.ns.cursor; -} - // Update the cursor to match the specified cursor mode // static void updateModeCursor(_GLFWwindow* window) { - // This is required for the cursor to update if it's inside the window - [getModeCursor(window) set]; - - // This is required for the cursor to update if it's outside the window - [window->ns.object invalidateCursorRectsForView:window->ns.view]; + if (window->cursorMode == GLFW_CURSOR_NORMAL) + { + if (window->cursor) + [(NSCursor*) window->cursor->ns.object set]; + else + [[NSCursor arrowCursor] set]; + } + else + [(NSCursor*) _glfw.ns.cursor set]; } // Enter fullscreen mode @@ -476,10 +465,11 @@ static int translateKey(unsigned int key) [trackingArea release]; } - NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited | - NSTrackingActiveInKeyWindow | - NSTrackingCursorUpdate | - NSTrackingInVisibleRect; + const NSTrackingAreaOptions options = NSTrackingMouseEnteredAndExited | + NSTrackingActiveInKeyWindow | + NSTrackingCursorUpdate | + NSTrackingInVisibleRect | + NSTrackingAssumeInside; trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options:options @@ -570,11 +560,6 @@ static int translateKey(unsigned int key) _glfwInputScroll(window, deltaX, deltaY); } -- (void)resetCursorRects -{ - [self addCursorRect:[self bounds] cursor:getModeCursor(window)]; -} - - (NSDragOperation)draggingEntered:(id )sender { if ((NSDragOperationGeneric & [sender draggingSourceOperationMask])