Module: wine Branch: master Commit: 72e893237ca9db195c9b3004576f2097c735d2e6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=72e893237ca9db195c9b300457...
Author: Ken Thomases ken@codeweavers.com Date: Tue May 7 03:00:39 2013 -0500
winemac: Consolidate mouse move handling into -[WineApplicationController handleMouseMove:].
---
dlls/winemac.drv/cocoa_app.h | 1 + dlls/winemac.drv/cocoa_app.m | 38 +++++++++++++++++++++++++++++++++++- dlls/winemac.drv/cocoa_window.h | 4 --- dlls/winemac.drv/cocoa_window.m | 41 --------------------------------------- 4 files changed, 38 insertions(+), 46 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.h b/dlls/winemac.drv/cocoa_app.h index 60a239c..f0cdfc3 100644 --- a/dlls/winemac.drv/cocoa_app.h +++ b/dlls/winemac.drv/cocoa_app.h @@ -60,6 +60,7 @@ enum {
WineWindow* lastTargetWindow; BOOL forceNextMouseMoveAbsolute; + double mouseMoveDeltaX, mouseMoveDeltaY;
NSMutableArray* orderedWineWindows;
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 7f2ec7c..3ef84e0 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -1157,6 +1157,7 @@ int macdrv_err_on;
if ([targetWindow isKindOfClass:[WineWindow class]]) { + macdrv_event* event; BOOL absolute = forceNextMouseMoveAbsolute || (targetWindow != lastTargetWindow); forceNextMouseMoveAbsolute = FALSE;
@@ -1172,7 +1173,42 @@ int macdrv_err_on; absolute = TRUE; }
- [targetWindow postMouseMovedEvent:anEvent absolute:absolute]; + if (absolute) + { + CGPoint point = CGEventGetLocation([anEvent CGEvent]); + + event = macdrv_create_event(MOUSE_MOVED_ABSOLUTE, targetWindow); + event->mouse_moved.x = point.x; + event->mouse_moved.y = point.y; + + mouseMoveDeltaX = 0; + mouseMoveDeltaY = 0; + } + else + { + /* Add event delta to accumulated delta error */ + /* deltaY is already flipped */ + mouseMoveDeltaX += [anEvent deltaX]; + mouseMoveDeltaY += [anEvent deltaY]; + + event = macdrv_create_event(MOUSE_MOVED, targetWindow); + event->mouse_moved.x = mouseMoveDeltaX; + event->mouse_moved.y = mouseMoveDeltaY; + + /* Keep the remainder after integer truncation. */ + mouseMoveDeltaX -= event->mouse_moved.x; + mouseMoveDeltaY -= event->mouse_moved.y; + } + + if (event->type == MOUSE_MOVED_ABSOLUTE || event->mouse_moved.x || event->mouse_moved.y) + { + event->mouse_moved.time_ms = [self ticksForEventTime:[anEvent timestamp]]; + + [targetWindow.queue postEvent:event]; + } + + macdrv_release_event(event); + lastTargetWindow = targetWindow; } else if (lastTargetWindow) diff --git a/dlls/winemac.drv/cocoa_window.h b/dlls/winemac.drv/cocoa_window.h index ed5f1f9..2d95e1a 100644 --- a/dlls/winemac.drv/cocoa_window.h +++ b/dlls/winemac.drv/cocoa_window.h @@ -48,8 +48,6 @@
NSUInteger lastModifierFlags;
- double mouseMoveDeltaX, mouseMoveDeltaY; - NSInteger levelWhenActive;
NSTimer* liveResizeDisplayTimer; @@ -68,6 +66,4 @@
- (void) adjustWindowLevel;
- - (void) postMouseMovedEvent:(NSEvent *)theEvent absolute:(BOOL)absolute; - @end diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 65d7bc5..80bf9a4 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -952,47 +952,6 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers) event:theEvent]; }
- - (void) postMouseMovedEvent:(NSEvent *)theEvent absolute:(BOOL)absolute - { - macdrv_event* event; - - if (absolute) - { - CGPoint point = CGEventGetLocation([theEvent CGEvent]); - - event = macdrv_create_event(MOUSE_MOVED_ABSOLUTE, self); - event->mouse_moved.x = point.x; - event->mouse_moved.y = point.y; - - mouseMoveDeltaX = 0; - mouseMoveDeltaY = 0; - } - else - { - /* Add event delta to accumulated delta error */ - /* deltaY is already flipped */ - mouseMoveDeltaX += [theEvent deltaX]; - mouseMoveDeltaY += [theEvent deltaY]; - - event = macdrv_create_event(MOUSE_MOVED, self); - event->mouse_moved.x = mouseMoveDeltaX; - event->mouse_moved.y = mouseMoveDeltaY; - - /* Keep the remainder after integer truncation. */ - mouseMoveDeltaX -= event->mouse_moved.x; - mouseMoveDeltaY -= event->mouse_moved.y; - } - - if (event->type == MOUSE_MOVED_ABSOLUTE || event->mouse_moved.x || event->mouse_moved.y) - { - event->mouse_moved.time_ms = [[WineApplicationController sharedController] ticksForEventTime:[theEvent timestamp]]; - - [queue postEvent:event]; - } - - macdrv_release_event(event); - } - - (void) setLevelWhenActive:(NSInteger)level { levelWhenActive = level;