diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-03-13 11:39:33 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-03-14 07:24:31 +0000 |
commit | 85bfaab5ec1f6d7661f7f8cc5619dda1ad6c1d0b (patch) | |
tree | 7dc23b146dd776fad85a146f3167afaef2aa7f5a | |
parent | b874d10d0aa1a733dd571234846aa4ff73b2f491 (diff) |
Refresh variants asynchronously
Synchronous refresh when deleting slides caused a crash.
Asynchronous refresh is also much more efficient when deleting/undoing
deep object trees.
Task-number: QT3DS-3146
Change-Id: I9f63f0edb44e6f557a77132eeaaa9c76df868ce6
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
-rw-r--r-- | src/Authoring/Studio/Palettes/Slide/SlideView.cpp | 12 | ||||
-rw-r--r-- | src/Authoring/Studio/Palettes/Slide/SlideView.h | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp index f3a5e099..d54ec277 100644 --- a/src/Authoring/Studio/Palettes/Slide/SlideView.cpp +++ b/src/Authoring/Studio/Palettes/Slide/SlideView.cpp @@ -43,7 +43,6 @@ #include "Qt3DSDMSlides.h" #include "Dialogs.h" -#include <QtCore/qtimer.h> #include "QtWidgets/qlabel.h" #include <QtQml/qqmlcontext.h> #include <QtQml/qqmlengine.h> @@ -63,6 +62,13 @@ SlideView::SlideView(QWidget *parent) : QQuickWidget(parent) g_StudioApp.GetCore()->GetDispatch()->AddPresentationChangeListener(this); setResizeMode(QQuickWidget::SizeRootObjectToView); QTimer::singleShot(0, this, &SlideView::initialize); + + m_variantRefreshTimer.setSingleShot(true); + m_variantRefreshTimer.setInterval(0); + connect(&m_variantRefreshTimer, &QTimer::timeout, [this]() { + m_SlidesModel->refreshVariants(); + m_MasterSlideModel->refreshVariants(m_SlidesModel->variantsModel()); + }); } SlideView::~SlideView() @@ -568,8 +574,8 @@ bool SlideView::isMaster(const qt3dsdm::Qt3DSDMSlideHandle &inSlideHandle) void SlideView::refreshVariants() { - m_SlidesModel->refreshVariants(); - m_MasterSlideModel->refreshVariants(m_SlidesModel->variantsModel()); + if (!m_variantRefreshTimer.isActive()) + m_variantRefreshTimer.start(); } void SlideView::OnBeginDataModelNotifications() diff --git a/src/Authoring/Studio/Palettes/Slide/SlideView.h b/src/Authoring/Studio/Palettes/Slide/SlideView.h index eed79655..aa0a880f 100644 --- a/src/Authoring/Studio/Palettes/Slide/SlideView.h +++ b/src/Authoring/Studio/Palettes/Slide/SlideView.h @@ -30,6 +30,7 @@ #define SLIDEVIEW_H #include <QtQuickWidgets/qquickwidget.h> +#include <QtCore/qtimer.h> #include "DispatchListeners.h" #include "SlideModel.h" @@ -151,6 +152,7 @@ private: QString m_currentController; QString m_toolTip; Qt::DockWidgetArea m_dockArea; + QTimer m_variantRefreshTimer; }; #endif // SLIDEVIEW_H |