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/qgraphicsscene.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/qgraphicsscene.cpp')
-rw-r--r-- | src/widgets/graphicsview/qgraphicsscene.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index 2f3cb4eaaf..2e65effb1a 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -3371,9 +3371,15 @@ bool QGraphicsScene::event(QEvent *event) break; } case QEvent::Leave: - // hackieshly unpacking the viewport pointer from the leave event. - d->leaveScene(reinterpret_cast<QWidget *>(event->d)); + Q_ASSERT_X(false, "QGraphicsScene::event", + "QGraphicsScene must not receive QEvent::Leave, use GraphicsSceneLeave"); break; + case QEvent::GraphicsSceneLeave: + { + auto *leaveEvent = static_cast<QGraphicsSceneEvent*>(event); + d->leaveScene(leaveEvent->widget()); + break; + } case QEvent::GraphicsSceneHelp: helpEvent(static_cast<QGraphicsSceneHelpEvent *>(event)); break; |