diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-11-11 00:12:10 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-11-11 23:39:06 +0100 |
commit | 89391da882d981a92e5f86e1d049d2e24baf9b2b (patch) | |
tree | 5309e1c2834ba6c669182f98dbe9652e566007aa /src/widgets/graphicsview/qgraphicsview.cpp | |
parent | f27f9e7bd3d180fed533bda3be812707ed38c6c0 (diff) |
Fix QGraphicsView's abuse of QEvent's d-pointer in Leave event handling
QGraphicsSceneEvent carries a widget pointer, and we can add a new
event
type. Assert that QGraphicsScene doesn't get Leave events from
elsewhere.
This was the only "usage" of QEvent's d-pointer in Qt, so with this gone
we can reduce the size of QEvent by 8 bytes.
Change-Id: I0513daf742de9084d0469d55b7a7f41b667e8081
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/widgets/graphicsview/qgraphicsview.cpp')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsview.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index 1db7bf222d..74a7755ccf 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -2871,11 +2871,10 @@ bool QGraphicsView::viewportEvent(QEvent *event) d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.constFirst()); } d->useLastMouseEvent = false; - // a hack to pass a viewport pointer to the scene inside the leave event - Q_ASSERT(event->d == nullptr); - QScopedValueRollback<QEventPrivate *> rb(event->d); - event->d = reinterpret_cast<QEventPrivate *>(viewport()); - QCoreApplication::sendEvent(d->scene, event); + QGraphicsSceneEvent leaveEvent(QEvent::GraphicsSceneLeave); + leaveEvent.setWidget(viewport()); + QCoreApplication::sendEvent(d->scene, &leaveEvent); + event->setAccepted(leaveEvent.isAccepted()); break; } #if QT_CONFIG(tooltip) |