winemac.drv: Simplify cursor clipping code paths.

Centralizes all clipping behavior into -startClippingCursor: and
-stopClippingCursor.

Signed-off-by: Tim Clem <tclem@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Tim Clem 2021-10-19 14:21:09 -07:00 committed by Alexandre Julliard
parent 0d8428fbc5
commit 325cc98d7d
1 changed files with 15 additions and 37 deletions

View File

@ -1456,33 +1456,6 @@ - (BOOL) setCursorPosition:(CGPoint)pos
return ret;
}
- (void) activateCursorClipping
{
if (cursorClippingEventTap && !CGEventTapIsEnabled(cursorClippingEventTap))
{
CGEventTapEnable(cursorClippingEventTap, TRUE);
[self setCursorPosition:NSPointToCGPoint([self flippedMouseLocation:[NSEvent mouseLocation]])];
}
}
- (void) deactivateCursorClipping
{
if (cursorClippingEventTap && CGEventTapIsEnabled(cursorClippingEventTap))
{
CGEventTapEnable(cursorClippingEventTap, FALSE);
[warpRecords removeAllObjects];
lastSetCursorPositionTime = [[NSProcessInfo processInfo] systemUptime];
}
}
- (void) updateCursorClippingState
{
if (clippingCursor && [NSApp isActive] && ![windowsBeingDragged count])
[self activateCursorClipping];
else
[self deactivateCursorClipping];
}
- (void) updateWindowsForCursorClipping
{
WineWindow* window;
@ -1510,7 +1483,10 @@ - (BOOL) startClippingCursor:(CGRect)rect
clippingCursor = TRUE;
cursorClipRect = rect;
[self updateCursorClippingState];
CGEventTapEnable(cursorClippingEventTap, TRUE);
[self setCursorPosition:NSPointToCGPoint([self flippedMouseLocation:[NSEvent mouseLocation]])];
[self updateWindowsForCursorClipping];
return TRUE;
@ -1518,12 +1494,21 @@ - (BOOL) startClippingCursor:(CGRect)rect
- (BOOL) stopClippingCursor
{
CGError err = CGAssociateMouseAndMouseCursorPosition(true);
CGError err;
if (!clippingCursor)
return TRUE;
err = CGAssociateMouseAndMouseCursorPosition(true);
if (err != kCGErrorSuccess)
return FALSE;
clippingCursor = FALSE;
[self updateCursorClippingState];
CGEventTapEnable(cursorClippingEventTap, FALSE);
[warpRecords removeAllObjects];
lastSetCursorPositionTime = [[NSProcessInfo processInfo] systemUptime];
[self updateWindowsForCursorClipping];
return TRUE;
@ -1554,7 +1539,6 @@ - (void) window:(WineWindow*)window isBeingDragged:(BOOL)dragged
[windowsBeingDragged addObject:window];
else
[windowsBeingDragged removeObject:window];
[self updateCursorClippingState];
}
- (void) windowWillOrderOut:(WineWindow*)window
@ -1584,7 +1568,6 @@ - (void) handleWindowDrag:(WineWindow*)window begin:(BOOL)begin
[windowsBeingDragged removeObject:window];
eventType = WINDOW_DRAG_END;
}
[self updateCursorClippingState];
event = macdrv_create_event(eventType, window);
if (eventType == WINDOW_DRAG_BEGIN)
@ -2161,7 +2144,6 @@ - (void) setupObservations
});
}
[windowsBeingDragged removeObject:window];
[self updateCursorClippingState];
}];
if (useDragNotifications) {
@ -2305,8 +2287,6 @@ - (void)applicationDidBecomeActive:(NSNotification *)notification
[self setMode:mode forDisplay:[displayID unsignedIntValue]];
}
[self updateCursorClippingState];
[self updateFullscreenWindows];
[self adjustWindowLevels:YES];
@ -2349,8 +2329,6 @@ - (void)applicationDidResignActive:(NSNotification *)notification
macdrv_event* event;
WineEventQueue* queue;
[self updateCursorClippingState];
[self invalidateGotFocusEvents];
event = macdrv_create_event(APP_DEACTIVATED, nil);