Report correct mouse position when made visible with hoverEnabled.
authorMichael Brasser <michael.brasser@nokia.com>
Mon, 2 Jul 2012 01:50:15 +0000 (11:50 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 4 Jul 2012 03:20:23 +0000 (05:20 +0200)
Task-number: QTBUG-24282
Change-Id: I778b2db18c28e2b33690531ec19eb24ecf444a38
Reviewed-by: Martin Jones <martin.jones@nokia.com>
src/quick/items/qquickmousearea.cpp
tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp

index 6897e3d..a2522a4 100644 (file)
@@ -47,6 +47,8 @@
 
 #include <private/qqmldata_p.h>
 
+#include <QtGui/private/qguiapplication_p.h>
+
 #include <QtGui/qevent.h>
 #include <QtGui/qguiapplication.h>
 #include <QtGui/qstylehints.h>
@@ -1057,8 +1059,14 @@ void QQuickMouseArea::itemChange(ItemChange change, const ItemChangeData &value)
     Q_D(QQuickMouseArea);
     switch (change) {
     case ItemVisibleHasChanged:
-        if (acceptHoverEvents() && d->hovered != (isVisible() && isUnderMouse()))
+        if (acceptHoverEvents() && d->hovered != (isVisible() && isUnderMouse())) {
+            if (!d->hovered) {
+                QPointF cursorPos = QGuiApplicationPrivate::lastCursorPosition;
+                d->lastScenePos = d->canvas->mapFromGlobal(cursorPos.toPoint());
+                d->lastPos = mapFromScene(d->lastScenePos);
+            }
             setHovered(!d->hovered);
+        }
         break;
     default:
         break;
index 8bc9b06..686c057 100644 (file)
@@ -989,7 +989,6 @@ void tst_QQuickMouseArea::hoverVisible()
     QCOMPARE(mouseTracker->hovered(), true);
     QCOMPARE(enteredSpy.count(), 1);
 
-    QEXPECT_FAIL("", "QTBUG-24282", Continue);
     QCOMPARE(QPointF(mouseTracker->mouseX(), mouseTracker->mouseY()), QPointF(11,33));
 
     delete canvas;