Fix cursorShape with QQuickWidget
authorLaszlo Agocs <laszlo.agocs@digia.com>
Thu, 14 Aug 2014 11:34:30 +0000 (13:34 +0200)
committerLaszlo Agocs <laszlo.agocs@digia.com>
Fri, 15 Aug 2014 08:35:01 +0000 (10:35 +0200)
Task-number: QTBUG-40729
Change-Id: If3b2f8ca8795da1ac7c626db9c872f735d1e7b5d
Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
src/quick/items/qquickitem.cpp
src/quick/items/qquickwindow.cpp

index 9a8243e..227889e 100644 (file)
@@ -42,6 +42,7 @@
 #include "qquickitem.h"
 
 #include "qquickwindow.h"
+#include "qquickrendercontrol.h"
 #include <QtQml/qjsengine.h>
 #include "qquickwindow_p.h"
 
@@ -6754,9 +6755,10 @@ void QQuickItem::setCursor(const QCursor &cursor)
     if (oldShape != cursor.shape() || oldShape >= Qt::LastCursor || cursor.shape() >= Qt::LastCursor) {
         d->extra.value().cursor = cursor;
         if (d->window) {
-            QQuickWindowPrivate *windowPrivate = QQuickWindowPrivate::get(d->window);
-            if (windowPrivate->cursorItem == this)
-                d->window->setCursor(cursor);
+            QWindow *renderWindow = QQuickRenderControl::renderWindowFor(d->window);
+            QWindow *window = renderWindow ? renderWindow : d->window; // this may not be a QQuickWindow
+            if (QQuickWindowPrivate::get(d->window)->cursorItem == this)
+                window->setCursor(cursor);
         }
     }
 
@@ -6764,7 +6766,9 @@ void QQuickItem::setCursor(const QCursor &cursor)
         d->incrementCursorCount(+1);
         d->hasCursor = true;
         if (d->window) {
-            QPointF pos = d->window->mapFromGlobal(QGuiApplicationPrivate::lastCursorPosition.toPoint());
+            QWindow *renderWindow = QQuickRenderControl::renderWindowFor(d->window);
+            QWindow *window = renderWindow ? renderWindow : d->window;
+            QPointF pos = window->mapFromGlobal(QGuiApplicationPrivate::lastCursorPosition.toPoint());
             if (contains(mapFromScene(pos)))
                 QQuickWindowPrivate::get(d->window)->updateCursor(pos);
         }
index a06f41c..01ebf59 100644 (file)
@@ -2255,10 +2255,12 @@ void QQuickWindowPrivate::updateCursor(const QPointF &scenePos)
     cursorItem = findCursorItem(contentItem, scenePos);
 
     if (cursorItem != oldCursorItem) {
+        QWindow *renderWindow = QQuickRenderControl::renderWindowFor(q);
+        QWindow *window = renderWindow ? renderWindow : q;
         if (cursorItem)
-            q->setCursor(cursorItem->cursor());
+            window->setCursor(cursorItem->cursor());
         else
-            q->unsetCursor();
+            window->unsetCursor();
     }
 }