From 72e893237ca9db195c9b3004576f2097c735d2e6 Mon Sep 17 00:00:00 2001 From: Ken Thomases Date: Tue, 7 May 2013 03:00:39 -0500 Subject: [PATCH] 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 60a239cdf9b..f0cdfc37443 100644 --- a/dlls/winemac.drv/cocoa_app.h +++ b/dlls/winemac.drv/cocoa_app.h @@ -60,6 +60,7 @@ @interface WineApplicationController : NSObject 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 7f2ec7c59f2..3ef84e052bb 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -1157,6 +1157,7 @@ - (void) handleMouseMove:(NSEvent*)anEvent if ([targetWindow isKindOfClass:[WineWindow class]]) { + macdrv_event* event; BOOL absolute = forceNextMouseMoveAbsolute || (targetWindow != lastTargetWindow); forceNextMouseMoveAbsolute = FALSE; @@ -1172,7 +1173,42 @@ - (void) handleMouseMove:(NSEvent*)anEvent 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 ed5f1f90f0a..2d95e1ab5d3 100644 --- a/dlls/winemac.drv/cocoa_window.h +++ b/dlls/winemac.drv/cocoa_window.h @@ -48,8 +48,6 @@ @interface WineWindow : NSPanel NSUInteger lastModifierFlags; - double mouseMoveDeltaX, mouseMoveDeltaY; - NSInteger levelWhenActive; NSTimer* liveResizeDisplayTimer; @@ -68,6 +66,4 @@ @interface WineWindow : NSPanel - (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 65d7bc58560..80bf9a4ab3d 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -952,47 +952,6 @@ - (void) postKeyEvent:(NSEvent *)theEvent 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;