diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2023-11-10 17:07:15 -0700 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2023-11-18 08:23:02 -0700 |
commit | cd7c5f94a0ed64c52d31998957134d099313932a (patch) | |
tree | cac7b87e6f50341d9d73ac329c44a9ab45ec02bd /src/quick/items/qquickwindow.cpp | |
parent | 03d58031c7233e0579f463b9484af8227b0938fd (diff) |
Update cursor if frame-synchronous hover update discovers hover change
Also mark cursor as dirty and force update after shape change.
Done-with: Matthias Rauter <matthias.rauter@qt.io>
Fixes: QTBUG-53987
Fixes: QTBUG-90457
Task-number: QTBUG-54019
Pick-to: 6.5 6.6
Change-Id: I64d9f5d0a39dbf141a8e82bee824b47a8884139b
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/quick/items/qquickwindow.cpp')
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 8e67121641..5c19a9bb81 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -12,6 +12,7 @@ #include <QtQuick/private/qsgrenderer_p.h> #include <QtQuick/private/qsgplaintexture_p.h> #include <QtQuick/private/qquickpointerhandler_p.h> +#include <QtQuick/private/qquickpointerhandler_p_p.h> #include <private/qsgrenderloop_p.h> #include <private/qsgrhisupport_p.h> #include <private/qquickrendercontrol_p.h> @@ -1677,11 +1678,14 @@ void QQuickWindowPrivate::updateCursor(const QPointF &scenePos, QQuickItem *root if (!rootItem) rootItem = contentItem; auto cursorItemAndHandler = findCursorItemAndHandler(rootItem, scenePos); - if (cursorItem != cursorItemAndHandler.first || cursorHandler != cursorItemAndHandler.second) { + if (cursorItem != cursorItemAndHandler.first || cursorHandler != cursorItemAndHandler.second || + (cursorItemAndHandler.second && QQuickPointerHandlerPrivate::get(cursorItemAndHandler.second)->cursorDirty)) { QWindow *renderWindow = QQuickRenderControl::renderWindowFor(q); QWindow *window = renderWindow ? renderWindow : q; cursorItem = cursorItemAndHandler.first; cursorHandler = cursorItemAndHandler.second; + if (cursorHandler) + QQuickPointerHandlerPrivate::get(cursorItemAndHandler.second)->cursorDirty = false; if (cursorItem) { const auto cursor = QQuickItemPrivate::get(cursorItem)->effectiveCursor(cursorHandler); qCDebug(lcHoverTrace) << "setting cursor" << cursor << "from" << cursorHandler << "or" << cursorItem; |