winemac: Consolidate mouse move handling into -[WineApplicationController handleMouseMove:].

This commit is contained in:
Ken Thomases 2013-05-07 03:00:39 -05:00 committed by Alexandre Julliard
parent 76691853f5
commit 72e893237c
4 changed files with 38 additions and 46 deletions

View File

@ -60,6 +60,7 @@ @interface WineApplicationController : NSObject <NSApplicationDelegate>
WineWindow* lastTargetWindow;
BOOL forceNextMouseMoveAbsolute;
double mouseMoveDeltaX, mouseMoveDeltaY;
NSMutableArray* orderedWineWindows;

View File

@ -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)

View File

@ -48,8 +48,6 @@ @interface WineWindow : NSPanel <NSWindowDelegate>
NSUInteger lastModifierFlags;
double mouseMoveDeltaX, mouseMoveDeltaY;
NSInteger levelWhenActive;
NSTimer* liveResizeDisplayTimer;
@ -68,6 +66,4 @@ @interface WineWindow : NSPanel <NSWindowDelegate>
- (void) adjustWindowLevel;
- (void) postMouseMovedEvent:(NSEvent *)theEvent absolute:(BOOL)absolute;
@end

View File

@ -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;