timebased: set connected node before processing

Fixes #1775
This commit is contained in:
itsmattkc
2021-10-21 13:57:49 -07:00
parent 348d7eb946
commit be24e7e580
3 changed files with 16 additions and 10 deletions
+10 -9
View File
@@ -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
+2 -1
View File
@@ -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)
+4
View File
@@ -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();