diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index add85c649..9790fc387 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -46,6 +46,8 @@ #include #include #include +#include +#include @@ -437,21 +439,35 @@ ChoicePage::applyActionChoice( ChoicePage::Choice choice ) connect( m_beforePartitionBarsView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, [ this ]( const QModelIndex& current, const QModelIndex& previous ) { + auto doReplace = [=] + { + // We can't use the PartitionPtrRole because we need to make changes to the + // main DeviceModel, not the immutable copy. + QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); + Partition* partition = KPMHelpers::findPartitionByPath( { selectedDevice() }, + partPath ); + if ( partition ) + PartitionActions::doReplacePartition( m_core, + selectedDevice(), + partition ); + }; + if ( m_core->isDirty() ) { - m_core->revertDevice( selectedDevice() ); - m_core->clearJobs(); + QFutureWatcher< void > watcher; + connect( &watcher, &QFutureWatcher< void >::finished, + this, doReplace ); + + QFuture< void > future = QtConcurrent::run( [=] + { + m_core->revertDevice( selectedDevice() ); + m_core->clearJobs(); + } ); + watcher.setFuture( future ); } + else + doReplace(); - // We can't use the PartitionPtrRole because we need to make changes to the - // main DeviceModel, not the immutable copy. - QString partPath = current.data( PartitionModel::PartitionPathRole ).toString(); - Partition* partition = KPMHelpers::findPartitionByPath( { selectedDevice() }, - partPath ); - if ( partition ) - PartitionActions::doReplacePartition( m_core, - selectedDevice(), - partition ); } ); break; case NoChoice: