diff --git a/app/widget/timebased/timebasedwidget.cpp b/app/widget/timebased/timebasedwidget.cpp index 2b3691884..d294ef466 100644 --- a/app/widget/timebased/timebasedwidget.cpp +++ b/app/widget/timebased/timebasedwidget.cpp @@ -74,17 +74,21 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node) return; } - if (viewer_node_) { + // Set viewer node + ViewerOutput* old = viewer_node_; + viewer_node_ = node; + + if (old) { // Call potential derivative functions for disconnecting the viewer node - DisconnectNodeEvent(viewer_node_); + DisconnectNodeEvent(old); // Disconnect length changed signal - disconnect(viewer_node_, &ViewerOutput::LengthChanged, this, &TimeBasedWidget::UpdateMaximumScroll); - disconnect(viewer_node_, &ViewerOutput::RemovedFromGraph, this, &TimeBasedWidget::ConnectedNodeRemovedFromGraph); + disconnect(old, &ViewerOutput::LengthChanged, this, &TimeBasedWidget::UpdateMaximumScroll); + disconnect(old, &ViewerOutput::RemovedFromGraph, this, &TimeBasedWidget::ConnectedNodeRemovedFromGraph); // Disconnect rate change signals if they were connected - disconnect(viewer_node_, &ViewerOutput::FrameRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase); - disconnect(viewer_node_, &ViewerOutput::SampleRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase); + disconnect(old, &ViewerOutput::FrameRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase); + disconnect(old, &ViewerOutput::SampleRateChanged, this, &TimeBasedWidget::AutoUpdateTimebase); // Reset timebase to null SetTimebase(rational()); @@ -94,9 +98,6 @@ void TimeBasedWidget::ConnectViewerNode(ViewerOutput *node) scrollbar_->ConnectTimelinePoints(nullptr); } - // Set viewer node - ViewerOutput* old = viewer_node_; - viewer_node_ = node; emit ConnectedNodeChanged(old, node); // Call derivatives diff --git a/app/widget/viewer/footageviewer.cpp b/app/widget/viewer/footageviewer.cpp index 2a2926f85..90624a2da 100644 --- a/app/widget/viewer/footageviewer.cpp +++ b/app/widget/viewer/footageviewer.cpp @@ -51,9 +51,10 @@ void FootageViewerWidget::DisconnectNodeEvent(ViewerOutput *n) { // Cache timestamp in case this footage is opened again later cached_timestamps_.insert(n, GetTime()); - SetTime(0); super::DisconnectNodeEvent(n); + + SetTime(0); } void FootageViewerWidget::StartFootageDragInternal(bool enable_video, bool enable_audio) diff --git a/app/widget/viewer/viewer.cpp b/app/widget/viewer/viewer.cpp index 7f9e194d4..8b115682c 100644 --- a/app/widget/viewer/viewer.cpp +++ b/app/widget/viewer/viewer.cpp @@ -532,6 +532,10 @@ void ViewerWidget::ForceRequeueFromCurrentTime() void ViewerWidget::UpdateTextureFromNode() { + if (!GetConnectedNode()) { + return; + } + rational time = GetTime(); bool frame_exists_at_time = FrameExistsAtTime(time); bool frame_might_be_still = ViewerMightBeAStill();