diff --git a/src/modules/partition/gui/PartitionViewStep.cpp b/src/modules/partition/gui/PartitionViewStep.cpp index cf13cba21..091aa7dcc 100644 --- a/src/modules/partition/gui/PartitionViewStep.cpp +++ b/src/modules/partition/gui/PartitionViewStep.cpp @@ -52,6 +52,8 @@ #include #include #include +#include +#include PartitionViewStep::PartitionViewStep( QObject* parent ) : Calamares::ViewStep( parent ) @@ -71,13 +73,19 @@ PartitionViewStep::PartitionViewStep( QObject* parent ) void -PartitionViewStep::continueLoading() +PartitionViewStep::initPartitionCoreModule() { Q_ASSERT( !m_core ); + m_core = new PartitionCoreModule( this ); +} + + +void +PartitionViewStep::continueLoading() +{ Q_ASSERT( !m_choicePage ); Q_ASSERT( !m_manualPartitionPage ); - m_core = new PartitionCoreModule( this ); m_manualPartitionPage = new PartitionPage( m_core ); m_choicePage = new ChoicePage(); @@ -468,7 +476,20 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) gs->insert( "drawNestedPartitions", false ); } - QTimer::singleShot( 0, this, &PartitionViewStep::continueLoading ); + // Now that we have the config, we load the PartitionCoreModule in the background + // because it could take a while. Then when it's done, we can set up the widgets + // and remove the spinner. + QFutureWatcher< void >* watcher = new QFutureWatcher< void >(); + connect( watcher, &QFutureWatcher< void >::finished, + this, [ this, watcher ] + { + continueLoading(); + watcher->deleteLater(); + } ); + + QFuture< void > future = + QtConcurrent::run( this, &PartitionViewStep::initPartitionCoreModule ); + watcher->setFuture( future ); } diff --git a/src/modules/partition/gui/PartitionViewStep.h b/src/modules/partition/gui/PartitionViewStep.h index a648df965..ce66e4bf9 100644 --- a/src/modules/partition/gui/PartitionViewStep.h +++ b/src/modules/partition/gui/PartitionViewStep.h @@ -44,8 +44,6 @@ public: explicit PartitionViewStep( QObject* parent = 0 ); virtual ~PartitionViewStep(); - void continueLoading(); - QString prettyName() const override; QWidget* createSummaryWidget() const override; @@ -68,6 +66,9 @@ public: QList< Calamares::job_ptr > jobs() const override; private: + void initPartitionCoreModule(); + void continueLoading(); + PartitionCoreModule* m_core; QStackedWidget* m_widget; ChoicePage* m_choicePage;