Fix crash on close

parent db9dfd1d
...@@ -68,6 +68,7 @@ TimelineController::TimelineController(QObject *parent) ...@@ -68,6 +68,7 @@ TimelineController::TimelineController(QObject *parent)
, m_zone(-1, -1) , m_zone(-1, -1)
, m_scale(QFontMetrics(QApplication::font()).maxWidth() / 250) , m_scale(QFontMetrics(QApplication::font()).maxWidth() / 250)
, m_timelinePreview(nullptr) , m_timelinePreview(nullptr)
, m_ready(false)
{ {
m_disablePreview = pCore->currentDoc()->getAction(QStringLiteral("disable_preview")); m_disablePreview = pCore->currentDoc()->getAction(QStringLiteral("disable_preview"));
connect(m_disablePreview, &QAction::triggered, this, &TimelineController::disablePreview); connect(m_disablePreview, &QAction::triggered, this, &TimelineController::disablePreview);
...@@ -87,11 +88,12 @@ TimelineController::~TimelineController() ...@@ -87,11 +88,12 @@ TimelineController::~TimelineController()
void TimelineController::prepareClose() void TimelineController::prepareClose()
{ {
// Clear roor so we don't call its methods anymore
m_ready = false;
m_root = nullptr;
// Delete timeline preview before resetting model so that removing clips from timeline doesn't invalidate // Delete timeline preview before resetting model so that removing clips from timeline doesn't invalidate
delete m_timelinePreview; delete m_timelinePreview;
m_timelinePreview = nullptr; m_timelinePreview = nullptr;
// Clear roor so we don't call its methods anymore
m_root = nullptr;
} }
void TimelineController::setModel(std::shared_ptr<TimelineItemModel> model) void TimelineController::setModel(std::shared_ptr<TimelineItemModel> model)
...@@ -102,7 +104,7 @@ void TimelineController::setModel(std::shared_ptr<TimelineItemModel> model) ...@@ -102,7 +104,7 @@ void TimelineController::setModel(std::shared_ptr<TimelineItemModel> model)
m_model = std::move(model); m_model = std::move(model);
connect(m_model.get(), &TimelineItemModel::requestClearAssetView, pCore.get(), &Core::clearAssetPanel); connect(m_model.get(), &TimelineItemModel::requestClearAssetView, pCore.get(), &Core::clearAssetPanel);
connect(m_model.get(), &TimelineItemModel::checkItemDeletion, [this] (int id) { connect(m_model.get(), &TimelineItemModel::checkItemDeletion, [this] (int id) {
if (m_root) { if (m_ready) {
QMetaObject::invokeMethod(m_root, "checkDeletion", Qt::QueuedConnection, Q_ARG(QVariant, id)); QMetaObject::invokeMethod(m_root, "checkDeletion", Qt::QueuedConnection, Q_ARG(QVariant, id));
} }
}); });
...@@ -155,6 +157,7 @@ std::shared_ptr<TimelineItemModel> TimelineController::getModel() const ...@@ -155,6 +157,7 @@ std::shared_ptr<TimelineItemModel> TimelineController::getModel() const
void TimelineController::setRoot(QQuickItem *root) void TimelineController::setRoot(QQuickItem *root)
{ {
m_root = root; m_root = root;
m_ready = true;
} }
Mlt::Tractor *TimelineController::tractor() Mlt::Tractor *TimelineController::tractor()
......
...@@ -572,6 +572,7 @@ private: ...@@ -572,6 +572,7 @@ private:
QAction *m_disablePreview; QAction *m_disablePreview;
std::shared_ptr<AudioCorrelation> m_audioCorrelator; std::shared_ptr<AudioCorrelation> m_audioCorrelator;
QMutex m_metaMutex; QMutex m_metaMutex;
bool m_ready;
void initializePreview(); void initializePreview();
bool darkBackground() const; bool darkBackground() const;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment