diff --git a/app/panel/param/param.cpp b/app/panel/param/param.cpp index bdbb8e8e0..2544c7748 100644 --- a/app/panel/param/param.cpp +++ b/app/panel/param/param.cpp @@ -94,9 +94,11 @@ void ParamPanel::CreateCurvePanel(NodeInput *input) panel->SetInput(input); panel->SetTimebase(view->timebase()); panel->SetTimestamp(view->GetTimestamp()); + panel->SetTimeTarget(view->GetTimeTarget()); connect(view, &NodeParamView::TimebaseChanged, panel, &CurvePanel::SetTimebase); connect(view, &NodeParamView::TimeChanged, panel, &CurvePanel::SetTimestamp); + connect(view, &NodeParamView::TimeTargetChanged, panel, &CurvePanel::SetTimeTarget); connect(panel, &CurvePanel::TimeChanged, view, &NodeParamView::SetTimestamp); connect(panel, &CurvePanel::TimeChanged, view, &NodeParamView::TimeChanged); connect(panel, &CurvePanel::CloseRequested, this, &ParamPanel::ClosingCurvePanel); diff --git a/app/widget/curvewidget/curvewidget.cpp b/app/widget/curvewidget/curvewidget.cpp index 71c742619..b31e31ea8 100644 --- a/app/widget/curvewidget/curvewidget.cpp +++ b/app/widget/curvewidget/curvewidget.cpp @@ -200,6 +200,8 @@ void CurveWidget::ScaleChangedEvent(const double &scale) void CurveWidget::TimeTargetChangedEvent(Node *target) { + ConnectViewerNode(nullptr); + key_control_->SetTimeTarget(target); view_->SetTimeTarget(target); @@ -207,6 +209,12 @@ void CurveWidget::TimeTargetChangedEvent(Node *target) if (bridge_) { bridge_->SetTimeTarget(target); } + + // FIXME: If a non-viewer node is ever set here, it will fail to update the length + ViewerOutput* viewer = dynamic_cast(target); + if (viewer) { + ConnectViewerNode(viewer); + } } void CurveWidget::UpdateInputLabel() diff --git a/app/widget/nodeparamview/nodeparamview.cpp b/app/widget/nodeparamview/nodeparamview.cpp index b9d1e7366..8675794c1 100644 --- a/app/widget/nodeparamview/nodeparamview.cpp +++ b/app/widget/nodeparamview/nodeparamview.cpp @@ -156,7 +156,9 @@ void NodeParamView::SetNodes(QList nodes) items_.append(item); - QTimer::singleShot(1, item, &NodeParamViewItem::SignalAllKeyframes); + QMetaObject::invokeMethod(item, + "SignalAllKeyframes", + Qt::QueuedConnection); emit OpenedNode(node); } @@ -218,6 +220,11 @@ const QList &NodeParamView::nodes() return nodes_; } +Node *NodeParamView::GetTimeTarget() const +{ + return keyframe_view_->GetTimeTarget(); +} + void NodeParamView::UpdateItemTime(const int64_t ×tamp) { rational time = Timecode::timestamp_to_time(timestamp, keyframe_view_->timebase()); diff --git a/app/widget/nodeparamview/nodeparamview.h b/app/widget/nodeparamview/nodeparamview.h index 097fcd4ae..be5cb5835 100644 --- a/app/widget/nodeparamview/nodeparamview.h +++ b/app/widget/nodeparamview/nodeparamview.h @@ -40,6 +40,8 @@ public: void SetNodes(QList nodes); const QList& nodes(); + Node* GetTimeTarget() const; + signals: void InputDoubleClicked(NodeInput* input);