diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 9af5665a5..e79fc21e4 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -791,10 +791,14 @@ void PartitionCoreModule::layoutApply( Device *dev, qint64 firstSector, qint64 lastSector, - QString luksPassphrase ) + QString luksPassphrase, + PartitionNode* parent, + const PartitionRole& role ) { bool isEfi = PartUtils::isEfiSystem(); - QList< Partition* > partList = m_partLayout->execute( dev, firstSector, lastSector, luksPassphrase ); + QList< Partition* > partList = m_partLayout->execute( dev, firstSector, lastSector, + luksPassphrase, parent, role + ); foreach ( Partition *part, partList ) { @@ -811,6 +815,17 @@ PartitionCoreModule::layoutApply( Device *dev, } } +void +PartitionCoreModule::layoutApply( Device *dev, + qint64 firstSector, + qint64 lastSector, + QString luksPassphrase ) +{ + layoutApply( dev, firstSector, lastSector, luksPassphrase, dev->partitionTable(), + PartitionRole( PartitionRole::Primary ) + ); +} + void PartitionCoreModule::revert() { diff --git a/src/modules/partition/core/PartitionCoreModule.h b/src/modules/partition/core/PartitionCoreModule.h index 2b2c73a3f..52cb47a59 100644 --- a/src/modules/partition/core/PartitionCoreModule.h +++ b/src/modules/partition/core/PartitionCoreModule.h @@ -160,6 +160,8 @@ public: void initLayout( const QVariantList& config ); void layoutApply( Device *dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); + void layoutApply( Device *dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ); + /** * @brief jobs creates and returns a list of jobs which can then apply the changes * requested by the user. diff --git a/src/modules/partition/core/PartitionLayout.cpp b/src/modules/partition/core/PartitionLayout.cpp index d0c1a7c94..bb5acdd2f 100644 --- a/src/modules/partition/core/PartitionLayout.cpp +++ b/src/modules/partition/core/PartitionLayout.cpp @@ -151,7 +151,9 @@ sizeToSectors( double size, PartitionLayout::SizeUnit unit, qint64 totalSize, qi QList< Partition* > PartitionLayout::execute( Device *dev, qint64 firstSector, - qint64 lastSector, QString luksPassphrase ) + qint64 lastSector, QString luksPassphrase, + PartitionNode* parent, + const PartitionRole& role ) { QList< Partition* > partList; qint64 size, minSize, end; @@ -177,9 +179,9 @@ PartitionLayout::execute( Device *dev, qint64 firstSector, if ( luksPassphrase.isEmpty() ) { currentPartition = KPMHelpers::createNewPartition( - dev->partitionTable(), + parent, *dev, - PartitionRole( PartitionRole::Primary ), + role, static_cast(part.partFileSystem), firstSector, end, @@ -189,9 +191,9 @@ PartitionLayout::execute( Device *dev, qint64 firstSector, else { currentPartition = KPMHelpers::createNewEncryptedPartition( - dev->partitionTable(), + parent, *dev, - PartitionRole( PartitionRole::Primary ), + role, static_cast(part.partFileSystem), firstSector, end, diff --git a/src/modules/partition/core/PartitionLayout.h b/src/modules/partition/core/PartitionLayout.h index e3eb7296b..5ec65cf22 100644 --- a/src/modules/partition/core/PartitionLayout.h +++ b/src/modules/partition/core/PartitionLayout.h @@ -67,7 +67,7 @@ public: * @brief Apply the current partition layout to the selected drive space. * @return A list of Partition objects. */ - QList< Partition* > execute( Device *dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase ); + QList< Partition* > execute( Device *dev, qint64 firstSector, qint64 lastSector, QString luksPassphrase, PartitionNode* parent, const PartitionRole& role ); private: QList< PartitionEntry > partLayout; diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index ba49bd95d..1b2cf5a69 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -670,41 +670,10 @@ ChoicePage::doAlongsideApply() dev->logicalSize(); m_core->resizePartition( dev, candidate, firstSector, newLastSector ); - Partition* newPartition = nullptr; - QString luksPassphrase = m_encryptWidget->passphrase(); - if ( luksPassphrase.isEmpty() ) - { - newPartition = KPMHelpers::createNewPartition( - candidate->parent(), - *dev, - candidate->roles(), - FileSystem::typeForName( m_defaultFsType ), - newLastSector + 2, // * - oldLastSector, - PartitionTable::FlagNone - ); - } - else - { - newPartition = KPMHelpers::createNewEncryptedPartition( - candidate->parent(), - *dev, - candidate->roles(), - FileSystem::typeForName( m_defaultFsType ), - newLastSector + 2, // * - oldLastSector, - luksPassphrase, - PartitionTable::FlagNone - ); - } - PartitionInfo::setMountPoint( newPartition, "/" ); - PartitionInfo::setFormat( newPartition, true ); - // * for some reason ped_disk_add_partition refuses to create a new partition - // if it starts on the sector immediately after the last used sector, so we - // have to push it one sector further, therefore + 2 instead of + 1. - - m_core->createPartition( dev, newPartition ); - + m_core->layoutApply( dev, newLastSector + 2, oldLastSector, + m_encryptWidget->passphrase(), candidate->parent(), + candidate->roles() + ); m_core->dumpQueue(); break;