diff --git a/app/window/mainwindow/mainwindow.cpp b/app/window/mainwindow/mainwindow.cpp index ed69336c4..4cdf2e1d3 100644 --- a/app/window/mainwindow/mainwindow.cpp +++ b/app/window/mainwindow/mainwindow.cpp @@ -331,21 +331,20 @@ void MainWindow::ProjectOpen(Project *p) void MainWindow::ProjectClose(Project *p) { - // Close any open sequences from project - QVector open_sequences = p->root()->ListChildrenOfType(); + // Close any nodes open in TimeBasedWidgets + foreach (PanelWidget* panel, PanelManager::instance()->panels()) { + TimeBasedPanel* tbp = dynamic_cast(panel); - foreach (Sequence* seq, open_sequences) { - if (IsSequenceOpen(seq)) { - CloseSequence(seq); + if (tbp && tbp->GetConnectedViewer() && tbp->GetConnectedViewer()->project() == p) { + if (dynamic_cast(tbp)) { + // Prefer our CloseSequence function which will delete any unnecessary timeline panels + CloseSequence(static_cast(tbp->GetConnectedViewer())); + } else { + tbp->DisconnectViewerNode(); + } } } - // Close any open footage in footage viewer - if (footage_viewer_panel_->GetConnectedViewer() - && footage_viewer_panel_->GetConnectedViewer()->project() == p) { - footage_viewer_panel_->DisconnectViewerNode(); - } - // Close any extra folder panels foreach (ProjectPanel* panel, folder_panels_) { if (panel->project() == p) { @@ -523,11 +522,9 @@ void MainWindow::RemoveTimelinePanel(TimelinePanel *panel) { // Stop showing this timeline in the viewer TimelineFocused(nullptr); + panel->ConnectViewerNode(nullptr); - if (timeline_panels_.size() == 1) { - // Leave our single remaining timeline panel open - panel->ConnectViewerNode(nullptr); - } else { + if (timeline_panels_.size() != 1) { timeline_panels_.removeOne(panel); panel->deleteLater(); }