aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Olav Tvete <[email protected]>2025-06-02 15:43:31 +0200
committerPaul Olav Tvete <[email protected]>2025-06-04 09:37:29 +0200
commitf5140d62082e9b06e0ca6c8e2175b5836286f52e (patch)
treee8b534d2bc3de54d365407b4037eabd2e8c0b72d /src
parentda9de7c13ea2c212d4762568f0e2318d23a96116 (diff)
Fix for global position in hover eventsHEADdev
The hover event delivery logic is based on scenePosition, so the global position has to be calculated. Using item.mapToGlobal(scenePosition) will apply the item's position twice. This change first calculates localPosition and then uses item.mapToGlobal(localPosition). Fixes: QTBUG-134099 Pick-to: 6.10 6.9 6.8 Change-Id: I83f1382784300a1c73ab2b6f50e0288dcf99689b Reviewed-by: Morten Johan Sørvig <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/quick/util/qquickdeliveryagent.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/quick/util/qquickdeliveryagent.cpp b/src/quick/util/qquickdeliveryagent.cpp
index 9301f64204..1d4d5904bb 100644
--- a/src/quick/util/qquickdeliveryagent.cpp
+++ b/src/quick/util/qquickdeliveryagent.cpp
@@ -1072,13 +1072,17 @@ bool QQuickDeliveryAgentPrivate::sendHoverEvent(QEvent::Type type, QQuickItem *i
{
auto itemPrivate = QQuickItemPrivate::get(item);
const auto transform = itemPrivate->windowToItemTransform();
- auto globalPos = item->mapToGlobal(scenePos);
- QHoverEvent hoverEvent(type, scenePos, globalPos, transform.map(lastScenePos), modifiers);
+
+ const auto localPos = transform.map(scenePos);
+ const auto globalPos = item->mapToGlobal(localPos);
+ const auto lastLocalPos = transform.map(lastScenePos);
+ const auto lastGlobalPos = item->mapToGlobal(lastLocalPos);
+ QHoverEvent hoverEvent(type, scenePos, globalPos, lastLocalPos, modifiers);
hoverEvent.setTimestamp(timestamp);
hoverEvent.setAccepted(true);
QEventPoint &point = hoverEvent.point(0);
- QMutableEventPoint::setPosition(point, transform.map(scenePos));
- QMutableEventPoint::setGlobalLastPosition(point, item->mapToGlobal(lastScenePos));
+ QMutableEventPoint::setPosition(point, localPos);
+ QMutableEventPoint::setGlobalLastPosition(point, lastGlobalPos);
hasFiltered.clear();
if (sendFilteredMouseEvent(&hoverEvent, item, item->parentItem()))