From 15c14584199dc43e4a309fc331f3144009008128 Mon Sep 17 00:00:00 2001 From: Jonathan Liu Date: Fri, 24 Feb 2012 00:42:34 +1100 Subject: [PATCH] Revert "Don't rely on mapFromGlobal in QGraphicsScenePrivate::itemsAtPosition." This reverts commit 7c0d15a22266a425c9e9ac0120d6774e120fe01e. The commit caused a regression whereby tooltips may be shown even if the mouse is not over the item if it has the Qt::ItemIgnoresTransformations flag and the QGraphicsView had been scaled. Task-number: QTBUG-17517 Task-number: QTBUG-22663 Change-Id: Ib7fd788d9712c5e659fe07182f9505a4eb135ab2 Reviewed-by: Andy Shaw Reviewed-by: Robin Burchell --- src/gui/graphicsview/qgraphicsscene.cpp | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 14c0f3c..d1cdd4f 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -1084,7 +1084,7 @@ void QGraphicsScenePrivate::enableMouseTrackingOnViews() /*! Returns all items for the screen position in \a event. */ -QList QGraphicsScenePrivate::itemsAtPosition(const QPoint &/*screenPos*/, +QList QGraphicsScenePrivate::itemsAtPosition(const QPoint &screenPos, const QPointF &scenePos, QWidget *widget) const { @@ -1093,12 +1093,16 @@ QList QGraphicsScenePrivate::itemsAtPosition(const QPoint &/*sc if (!view) return q->items(scenePos, Qt::IntersectsItemShape, Qt::DescendingOrder, QTransform()); - const QRectF pointRect(scenePos, QSizeF(1, 1)); + const QRectF pointRect(QPointF(widget->mapFromGlobal(screenPos)), QSizeF(1, 1)); if (!view->isTransformed()) return q->items(pointRect, Qt::IntersectsItemShape, Qt::DescendingOrder); const QTransform viewTransform = view->viewportTransform(); - return q->items(pointRect, Qt::IntersectsItemShape, + if (viewTransform.type() <= QTransform::TxScale) { + return q->items(viewTransform.inverted().mapRect(pointRect), Qt::IntersectsItemShape, + Qt::DescendingOrder, viewTransform); + } + return q->items(viewTransform.inverted().map(pointRect), Qt::IntersectsItemShape, Qt::DescendingOrder, viewTransform); } -- 1.7.6