Module: wine
Branch: master
Commit: 76691853f527fe799a05f0d8cb75a4f2abfec4a8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=76691853f527fe799a05f0d8c…
Author: Ken Thomases <ken(a)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 ||