Module: wine Branch: master Commit: 76691853f527fe799a05f0d8cb75a4f2abfec4a8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=76691853f527fe799a05f0d8cb...
Author: Ken Thomases ken@codeweavers.com Date: Tue May 7 03:00:35 2013 -0500
winemac: Extract application-level handling of mouse move events to a separate method.
---
dlls/winemac.drv/cocoa_app.m | 94 ++++++++++++++++++++++-------------------- 1 files changed, 49 insertions(+), 45 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 7a304a8..7f2ec7c 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -1134,6 +1134,54 @@ int macdrv_err_on; return TRUE; }
+ - (void) handleMouseMove:(NSEvent*)anEvent + { + WineWindow* targetWindow; + + /* Because of the way -[NSWindow setAcceptsMouseMovedEvents:] works, the + event indicates its window is the main window, even if the cursor is + over a different window. Find the actual WineWindow that is under the + cursor and post the event as being for that window. */ + if ([anEvent type] == NSMouseMoved) + { + CGPoint cgpoint = CGEventGetLocation([anEvent CGEvent]); + NSPoint point = [self flippedMouseLocation:NSPointFromCGPoint(cgpoint)]; + NSInteger windowUnderNumber; + + windowUnderNumber = [NSWindow windowNumberAtPoint:point + belowWindowWithWindowNumber:0]; + targetWindow = (WineWindow*)[NSApp windowWithWindowNumber:windowUnderNumber]; + } + else + targetWindow = (WineWindow*)[anEvent window]; + + if ([targetWindow isKindOfClass:[WineWindow class]]) + { + BOOL absolute = forceNextMouseMoveAbsolute || (targetWindow != lastTargetWindow); + forceNextMouseMoveAbsolute = FALSE; + + // If we recently warped the cursor (other than in our cursor-clipping + // event tap), discard mouse move events until we see an event which is + // later than that time. + if (lastSetCursorPositionTime) + { + if ([anEvent timestamp] <= lastSetCursorPositionTime) + return; + + lastSetCursorPositionTime = 0; + absolute = TRUE; + } + + [targetWindow postMouseMovedEvent:anEvent absolute:absolute]; + lastTargetWindow = targetWindow; + } + else if (lastTargetWindow) + { + [[NSCursor arrowCursor] set]; + [self unhideCursor]; + lastTargetWindow = nil; + } + }
// Returns TRUE if the event was handled and caller should do nothing more // with it. Returns FALSE if the caller should process it as normal and @@ -1152,51 +1200,7 @@ int macdrv_err_on; if (type == NSMouseMoved || type == NSLeftMouseDragged || type == NSRightMouseDragged || type == NSOtherMouseDragged) { - WineWindow* targetWindow; - - /* Because of the way -[NSWindow setAcceptsMouseMovedEvents:] works, the - event indicates its window is the main window, even if the cursor is - over a different window. Find the actual WineWindow that is under the - cursor and post the event as being for that window. */ - if (type == NSMouseMoved) - { - CGPoint cgpoint = CGEventGetLocation([anEvent CGEvent]); - NSPoint point = [self flippedMouseLocation:NSPointFromCGPoint(cgpoint)]; - NSInteger windowUnderNumber; - - windowUnderNumber = [NSWindow windowNumberAtPoint:point - belowWindowWithWindowNumber:0]; - targetWindow = (WineWindow*)[NSApp windowWithWindowNumber:windowUnderNumber]; - } - else - targetWindow = (WineWindow*)[anEvent window]; - - if ([targetWindow isKindOfClass:[WineWindow class]]) - { - BOOL absolute = forceNextMouseMoveAbsolute || (targetWindow != lastTargetWindow); - forceNextMouseMoveAbsolute = FALSE; - - // If we recently warped the cursor (other than in our cursor-clipping - // event tap), discard mouse move events until we see an event which is - // later than that time. - if (lastSetCursorPositionTime) - { - if ([anEvent timestamp] <= lastSetCursorPositionTime) - return; - - lastSetCursorPositionTime = 0; - absolute = TRUE; - } - - [targetWindow postMouseMovedEvent:anEvent absolute:absolute]; - lastTargetWindow = targetWindow; - } - else if (lastTargetWindow) - { - [[NSCursor arrowCursor] set]; - [self unhideCursor]; - lastTargetWindow = nil; - } + [self handleMouseMove:anEvent]; } else if (type == NSLeftMouseDown || type == NSLeftMouseUp || type == NSRightMouseDown || type == NSRightMouseUp ||