Cocoa: get mouse position from event if possible
...instead of using the current mouse position. This is important if event processing is delayed: we want the QMouseEvent to have the position when the event happened, not the current position. Regression from Qt 4. Change-Id: Ifd4f0f02853236a204de96c5a97e72f86c29f0b7 Task-id: QTBUG-37926 Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>
This commit is contained in:
parent
63c7ceaf1b
commit
39be577cc2
@ -662,6 +662,19 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
|
|||||||
m_frameStrutButtons = Qt::NoButton;
|
m_frameStrutButtons = Qt::NoButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSPoint) screenMousePoint:(NSEvent *)theEvent
|
||||||
|
{
|
||||||
|
NSPoint screenPoint;
|
||||||
|
if (theEvent) {
|
||||||
|
NSPoint windowPoint = [theEvent locationInWindow];
|
||||||
|
NSRect screenRect = [[theEvent window] convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 1, 1)];
|
||||||
|
screenPoint = screenRect.origin;
|
||||||
|
} else {
|
||||||
|
screenPoint = [NSEvent mouseLocation];
|
||||||
|
}
|
||||||
|
return screenPoint;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)handleMouseEvent:(NSEvent *)theEvent
|
- (void)handleMouseEvent:(NSEvent *)theEvent
|
||||||
{
|
{
|
||||||
[self handleTabletEvent: theEvent];
|
[self handleTabletEvent: theEvent];
|
||||||
@ -676,7 +689,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
|
|||||||
m_platformWindow->m_forwardWindow = 0;
|
m_platformWindow->m_forwardWindow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[targetView convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint];
|
[targetView convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&qtWindowPoint andScreenPoint:&qtScreenPoint];
|
||||||
ulong timestamp = [theEvent timestamp] * 1000;
|
ulong timestamp = [theEvent timestamp] * 1000;
|
||||||
|
|
||||||
QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag();
|
QCocoaDrag* nativeDrag = QCocoaIntegration::instance()->drag();
|
||||||
@ -849,7 +862,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
|
|||||||
|
|
||||||
QPointF windowPoint;
|
QPointF windowPoint;
|
||||||
QPointF screenPoint;
|
QPointF screenPoint;
|
||||||
[self convertFromScreen:[NSEvent mouseLocation] toWindowPoint:&windowPoint andScreenPoint:&screenPoint];
|
[self convertFromScreen:[self screenMousePoint:theEvent] toWindowPoint:&windowPoint andScreenPoint:&screenPoint];
|
||||||
QWindow *childWindow = m_platformWindow->childWindowAt(windowPoint.toPoint());
|
QWindow *childWindow = m_platformWindow->childWindowAt(windowPoint.toPoint());
|
||||||
|
|
||||||
// Top-level windows generate enter-leave events for sub-windows.
|
// Top-level windows generate enter-leave events for sub-windows.
|
||||||
|
Loading…
Reference in New Issue
Block a user