summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard Moe Gustavsen <richard.gustavsen@nokia.com>2010-03-26 09:34:42 (GMT)
committerRichard Moe Gustavsen <richard.gustavsen@nokia.com>2010-04-07 10:35:57 (GMT)
commit61e26e2fcc086112e5e8897a6d1c20c4b9df5f49 (patch)
tree96660d0f4639af460d7e312b83b73924aa0dd064 /src
parent600ec57606ef0c02a51f9875e0a201ff71d09c19 (diff)
downloadQt-61e26e2fcc086112e5e8897a6d1c20c4b9df5f49.zip
Qt-61e26e2fcc086112e5e8897a6d1c20c4b9df5f49.tar.gz
Qt-61e26e2fcc086112e5e8897a6d1c20c4b9df5f49.tar.bz2
Cocoa: send mouse move event upon a mouse enter
On all platforms, we always send a mouse move event when the mouse enters a widget (if mouse tracking is on, that is). Then macnativeevents auto test revealed that we did not do this for the cocoa port. This patch will fix this. Reviewed-by: cduclos Reviewed-by: prasanth
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index 06eb7ff..9c5380b 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -657,23 +657,33 @@ static int qCocoaViewCount = 0;
{
if (!qwidget)
return;
-
if (qwidgetprivate->data.in_destructor)
return;
- QEvent enterEvent(QEvent::Enter);
- NSPoint windowPoint = [event locationInWindow];
- NSPoint globalPoint = [[event window] convertBaseToScreen:windowPoint];
- NSPoint viewPoint = [self convertPoint:windowPoint fromView:nil];
+
if (!qAppInstance()->activeModalWidget() || QApplicationPrivate::tryModalHelper(qwidget, 0)) {
+ QEvent enterEvent(QEvent::Enter);
+ NSPoint windowPoint = [event locationInWindow];
+ NSPoint globalPoint = [[event window] convertBaseToScreen:windowPoint];
+ NSPoint viewPoint = [self convertPoint:windowPoint fromView:nil];
QApplication::sendEvent(qwidget, &enterEvent);
qt_mouseover = qwidget;
- // Update cursor and dispatch hover events.
+ // Update cursor icon:
qt_mac_update_cursor_at_global_pos(flipPoint(globalPoint).toPoint());
- if (qwidget->testAttribute(Qt::WA_Hover) &&
- (!qAppInstance()->activePopupWidget() || qAppInstance()->activePopupWidget() == qwidget->window())) {
- QHoverEvent he(QEvent::HoverEnter, QPoint(viewPoint.x, viewPoint.y), QPoint(-1, -1));
- QApplicationPrivate::instance()->notify_helper(qwidget, &he);
+
+ // Send mouse move and hover events as well:
+ if (!qAppInstance()->activePopupWidget() || qAppInstance()->activePopupWidget() == qwidget->window()) {
+ if (qwidget->testAttribute(Qt::WA_MouseTracking)) {
+ NSEvent *mouseEvent = [NSEvent mouseEventWithType:NSMouseMoved
+ location:windowPoint modifierFlags:[event modifierFlags] timestamp:[event timestamp]
+ windowNumber:[event windowNumber] context:[event context] eventNumber:[event eventNumber]
+ clickCount:0 pressure:0];
+ qt_mac_handleMouseEvent(self, mouseEvent, QEvent::MouseMove, Qt::NoButton);
+ }
+ if (qwidget->testAttribute(Qt::WA_Hover)) {
+ QHoverEvent he(QEvent::HoverEnter, QPoint(viewPoint.x, viewPoint.y), QPoint(-1, -1));
+ QApplicationPrivate::instance()->notify_helper(qwidget, &he);
+ }
}
}
}