Ken Thomases : winemac: For SetCursorPos(), reset positions of pending mouse button and scroll events.
Module: wine Branch: master Commit: 51129752bc0ef5c4b2f90c1af09ed2c63d79e119 URL: http://source.winehq.org/git/wine.git/?a=commit;h=51129752bc0ef5c4b2f90c1af0... Author: Ken Thomases <ken(a)codeweavers.com> Date: Fri Apr 26 04:06:12 2013 -0500 winemac: For SetCursorPos(), reset positions of pending mouse button and scroll events. They are effectively deemed to have happened after the SetCursorPos(). --- dlls/winemac.drv/cocoa_app.m | 3 ++- dlls/winemac.drv/cocoa_event.h | 2 ++ dlls/winemac.drv/cocoa_event.m | 23 +++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletions(-) diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index cde93d8..7a304a8 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -1032,8 +1032,8 @@ int macdrv_err_on; { [self clipCursorLocation:&pos]; + ret = [self warpCursorTo:&pos from:NULL]; synthesizedLocation = pos; - ret = [self warpCursorTo:&synthesizedLocation from:NULL]; if (ret) { // We want to discard mouse-move events that have already been @@ -1076,6 +1076,7 @@ int macdrv_err_on; [queue discardEventsMatchingMask:event_mask_for_type(MOUSE_MOVED) | event_mask_for_type(MOUSE_MOVED_ABSOLUTE) forWindow:nil]; + [queue resetMouseEventPositions:pos]; } [eventQueuesLock unlock]; } diff --git a/dlls/winemac.drv/cocoa_event.h b/dlls/winemac.drv/cocoa_event.h index c1afc73..4e6bf84 100644 --- a/dlls/winemac.drv/cocoa_event.h +++ b/dlls/winemac.drv/cocoa_event.h @@ -42,6 +42,8 @@ - (BOOL) query:(macdrv_query*)query timeout:(NSTimeInterval)timeout processEvents:(BOOL)processEvents; - (BOOL) query:(macdrv_query*)query timeout:(NSTimeInterval)timeout; + - (void) resetMouseEventPositions:(CGPoint)pos; + @end void OnMainThread(dispatch_block_t block); diff --git a/dlls/winemac.drv/cocoa_event.m b/dlls/winemac.drv/cocoa_event.m index 1cbd5fb..7c41d26 100644 --- a/dlls/winemac.drv/cocoa_event.m +++ b/dlls/winemac.drv/cocoa_event.m @@ -280,6 +280,29 @@ static NSString* const WineEventQueueThreadDictionaryKey = @"WineEventQueueThrea return [self query:query timeout:timeout processEvents:FALSE]; } + - (void) resetMouseEventPositions:(CGPoint)pos + { + MacDrvEvent* event; + + [eventsLock lock]; + + for (event in events) + { + if (event->event->type == MOUSE_BUTTON) + { + event->event->mouse_button.x = pos.x; + event->event->mouse_button.y = pos.y; + } + else if (event->event->type == MOUSE_SCROLL) + { + event->event->mouse_scroll.x = pos.x; + event->event->mouse_scroll.y = pos.y; + } + } + + [eventsLock unlock]; + } + /*********************************************************************** * OnMainThread
participants (1)
-
Alexandre Julliard