From 63f0c196eecb88804f8bbe410a38d0274955f994 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 14 Aug 2014 13:34:30 +0200 Subject: [PATCH] Fix cursorShape with QQuickWidget Task-number: QTBUG-40729 Change-Id: If3b2f8ca8795da1ac7c626db9c872f735d1e7b5d Reviewed-by: Paul Olav Tvete --- src/quick/items/qquickitem.cpp | 12 ++++++++---- src/quick/items/qquickwindow.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 9a8243e..227889e 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -42,6 +42,7 @@ #include "qquickitem.h" #include "qquickwindow.h" +#include "qquickrendercontrol.h" #include #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); } diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index a06f41c..01ebf59 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -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(); } } -- 2.7.4