From 8d30f1d00409cc64e3e98b4f7d89af3ee1a4530d Mon Sep 17 00:00:00 2001 From: Knud Dollereder Date: Fri, 8 Jul 2022 16:44:57 +0200 Subject: [PATCH] Prevent access of invalid frames Changing keyframe positions while the timelineview is hidden might lead to access of invalid frames when showing the timelineview again. Prevent this by calling invalidateScene from within the showEvent. Change-Id: Ib9c1e90de5bd7679823c4faeed9156da764c98a6 Reviewed-by: Thomas Hartmann --- .../timelineeditor/timelinegraphicsscene.cpp | 10 ++++++---- .../components/timelineeditor/timelinewidget.cpp | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp index 2acf6601ab7..8511ebcfaf6 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp @@ -444,10 +444,12 @@ void TimelineGraphicsScene::invalidateHeightForTarget(const ModelNode &target) void TimelineGraphicsScene::invalidateScene() { - ModelNode node = timelineView()->modelNodeForId( - timelineWidget()->toolBar()->currentTimelineId()); - setTimeline(QmlTimeline(node)); - invalidateScrollbar(); + if (timelineView()->isAttached()) { + ModelNode node = timelineView()->modelNodeForId( + timelineWidget()->toolBar()->currentTimelineId()); + setTimeline(QmlTimeline(node)); + invalidateScrollbar(); + } } void TimelineGraphicsScene::invalidateScrollbar() diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index ceed4831791..81f45e5e0cc 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -625,6 +625,7 @@ void TimelineWidget::showEvent(QShowEvent *event) m_timelineView->setEnabled(true); graphicsScene()->setWidth(m_graphicsView->viewport()->width()); + graphicsScene()->invalidateScene(); graphicsScene()->invalidateLayout(); graphicsScene()->invalidate(); graphicsScene()->onShow();