diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index b141655124682916ed0c1c9745aa993f5c6eb1d6..4d68f4b1033f0308ecab0edf7378f76a7fbf98bd 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -10,7 +10,7 @@ find_package( KF5 REQUIRED CoreAddons ) # These are needed because KPMcore links publicly against ConfigCore, I18n, IconThemes, KIOCore and Service find_package( KF5 REQUIRED Config I18n IconThemes KIO Service ) -find_package( KPMcore 3.0.0 REQUIRED ) +find_package( KPMcore 3.0.2 REQUIRED ) add_subdirectory( tests ) diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 11931347fa0230909fb8b7786b79eed1ec15f09e..0f9b4203a5087349de65150d660c4cde3f6db222 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -51,8 +51,9 @@ canBeReplaced( Partition* candidate ) qint64 requiredStorageB = ( requiredStorageGB + 0.5 ) * 1024 * 1024 * 1024; cDebug() << "Required storage B:" << requiredStorageB << QString( "(%1GB)" ).arg( requiredStorageB / 1024 / 1024 / 1024 ); - cDebug() << "Available storage B:" << availableStorageB - << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ); + cDebug() << "Storage capacity B:" << availableStorageB + << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ) + << "for" << candidate->partitionPath() << " length:" << candidate->length(); if ( ok && availableStorageB > requiredStorageB ) @@ -102,7 +103,9 @@ canBeResized( Partition* candidate ) cDebug() << "Required storage B:" << requiredStorageB << QString( "(%1GB)" ).arg( requiredStorageB / 1024 / 1024 / 1024 ); cDebug() << "Available storage B:" << availableStorageB - << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ); + << QString( "(%1GB)" ).arg( availableStorageB / 1024 / 1024 / 1024 ) + << "for" << candidate->partitionPath() << " length:" << candidate->length() + << " sectorsUsed:" << candidate->sectorsUsed() << " fsType:" << candidate->fileSystem().name(); if ( ok && availableStorageB > requiredStorageB ) diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index 90779b7fa6cc1d60b02216f0e59217724e11d751..b8d81d91372a4493cccd9680ffc3598a02e93483 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -1,6 +1,6 @@ /* === This file is part of Calamares - <http://github.com/calamares> === * - * Copyright 2014-2016, Teo Mrnjavac <teo@kde.org> + * Copyright 2014-2017, Teo Mrnjavac <teo@kde.org> * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -148,7 +148,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass ->globalStorage() ->value( "efiSystemPartition" ) .toString() ); - core->createPartition( dev, efiPartition ); + core->createPartition( dev, efiPartition, PartitionTable::FlagEsp | PartitionTable::FlagBoot ); firstFreeSector = lastSector + 1; } else diff --git a/src/modules/partition/core/PartitionCoreModule.cpp b/src/modules/partition/core/PartitionCoreModule.cpp index 87393a4248051af42481f903bae4768549451565..7ce67be1699f2e3526c5a3b1697ff7703f3c2360 100644 --- a/src/modules/partition/core/PartitionCoreModule.cpp +++ b/src/modules/partition/core/PartitionCoreModule.cpp @@ -441,6 +441,7 @@ PartitionCoreModule::jobs() const lst << info->jobs; devices << info->device.data(); } + cDebug() << "Creating FillGlobalStorageJob with bootLoader path" << m_bootLoaderInstallPath; lst << Calamares::job_ptr( new FillGlobalStorageJob( devices, m_bootLoaderInstallPath ) ); @@ -596,6 +597,7 @@ PartitionCoreModule::findPartitionByMountPoint( const QString& mountPoint ) cons void PartitionCoreModule::setBootLoaderInstallPath( const QString& path ) { + cDebug() << "PCM::setBootLoaderInstallPath" << path; m_bootLoaderInstallPath = path; } diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index b700a24aa319034dc273bcc8b3b8b1e8b799e79a..68a75c2df94767a287866b308e66b0a4a65e674e 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -1,6 +1,6 @@ /* === This file is part of Calamares - <http://github.com/calamares> === * - * Copyright 2014-2016, Teo Mrnjavac <teo@kde.org> + * Copyright 2014-2017, Teo Mrnjavac <teo@kde.org> * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -565,8 +565,20 @@ ChoicePage::onLeave() } else // installPath is then passed to the bootloader module for MBR setup { - if ( m_bootloaderComboBox.isNull() ) - m_core->setBootLoaderInstallPath( selectedDevice()->deviceNode() ); + if ( !m_isEfi ) + { + if ( m_bootloaderComboBox.isNull() ) + { + m_core->setBootLoaderInstallPath( selectedDevice()->deviceNode() ); + } + else + { + QVariant var = m_bootloaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); + if ( !var.isValid() ) + return; + m_core->setBootLoaderInstallPath( var.toString() ); + } + } } } diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp index 90545fe80092d4ee043c8ac4be21edc50b13f1f8..4cd22bf68f183deebb713023442dddc36691826a 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.cpp +++ b/src/modules/partition/gui/CreatePartitionDialog.cpp @@ -263,12 +263,15 @@ CreatePartitionDialog::checkMountPointSelection() { const QString& selection = m_ui->mountPointComboBox->currentText(); - if (m_usedMountPoints.contains(selection)) { - m_ui->labelMountPoint->setText("Mountpoint already in use. Please select another one."); - m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); - } else { + if ( m_usedMountPoints.contains( selection ) ) + { + m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); + m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); + } + else + { m_ui->labelMountPoint->setText( QString() ); - m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); } } diff --git a/src/modules/partition/gui/CreatePartitionDialog.ui b/src/modules/partition/gui/CreatePartitionDialog.ui index bad15a4cfd743639a1c50c288b4b3494f4e17679..53445e0ec3c8f9c6a85f56bc99262025986356e1 100644 --- a/src/modules/partition/gui/CreatePartitionDialog.ui +++ b/src/modules/partition/gui/CreatePartitionDialog.ui @@ -167,11 +167,6 @@ </item> <item row="7" column="1"> <widget class="QLabel" name="labelMountPoint"> - <property name="font"> - <font> - <italic>true</italic> - </font> - </property> <property name="text"> <string/> </property> diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp index 5aa1e21f6719dae75eff85b2698b5a5f9b034a1f..1909e48e8582b624965ad01f63deec1c017d2c1d 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp +++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp @@ -67,7 +67,8 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device, Partit m_partitionSizeController->setSpinBox( m_ui->sizeSpinBox ); m_ui->mountPointComboBox->setCurrentText( PartitionInfo::mountPoint( partition ) ); - connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, this, &EditExistingPartitionDialog::checkMountPointSelection ); + connect( m_ui->mountPointComboBox, &QComboBox::currentTextChanged, + this, &EditExistingPartitionDialog::checkMountPointSelection ); replacePartResizerWidget(); @@ -300,11 +301,14 @@ EditExistingPartitionDialog::checkMountPointSelection() { const QString& selection = m_ui->mountPointComboBox->currentText(); - if (m_usedMountPoints.contains(selection)) { - m_ui->labelMountPoint->setText("Mountpoint already in use. Please select another one."); - m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); - } else { + if ( m_usedMountPoints.contains( selection ) ) + { + m_ui->labelMountPoint->setText( tr( "Mountpoint already in use. Please select another one." ) ); + m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false ); + } + else + { m_ui->labelMountPoint->setText( QString() ); - m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); + m_ui->buttonBox->button( QDialogButtonBox::Ok )->setEnabled( true ); } } diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.ui b/src/modules/partition/gui/EditExistingPartitionDialog.ui index 27e930fda26e2abacbbccf3bf5972defbfba5c9e..edee3c7a72998278f418507b7574521fcb9af473 100644 --- a/src/modules/partition/gui/EditExistingPartitionDialog.ui +++ b/src/modules/partition/gui/EditExistingPartitionDialog.ui @@ -161,11 +161,6 @@ </item> <item row="7" column="1"> <widget class="QLabel" name="labelMountPoint"> - <property name="font"> - <font> - <italic>true</italic> - </font> - </property> <property name="text"> <string/> </property> diff --git a/src/modules/partition/gui/PartitionPage.cpp b/src/modules/partition/gui/PartitionPage.cpp index 5e32390507faa17ff4b128b5b29627c36b6b3455..93d8e8be2df056f78bd4d65580c26b7d470cc383 100644 --- a/src/modules/partition/gui/PartitionPage.cpp +++ b/src/modules/partition/gui/PartitionPage.cpp @@ -57,7 +57,10 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) , m_ui( new Ui_PartitionPage ) , m_lastSelectedBootLoaderIndex(-1) , m_core( core ) + , m_isEfi( false ) { + m_isEfi = QDir( "/sys/firmware/efi/efivars" ).exists(); + m_ui->setupUi( this ); m_ui->partitionLabelsView->setVisible( Calamares::JobQueue::instance()->globalStorage()-> @@ -100,7 +103,7 @@ PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent ) connect( m_ui->editButton, &QAbstractButton::clicked, this, &PartitionPage::onEditClicked ); connect( m_ui->deleteButton, &QAbstractButton::clicked, this, &PartitionPage::onDeleteClicked ); - if ( QDir( "/sys/firmware/efi/efivars" ).exists() ) { + if ( m_isEfi ) { m_ui->bootLoaderComboBox->hide(); m_ui->label_3->hide(); } @@ -177,7 +180,10 @@ PartitionPage::onCreateClicked() Partition* partition = model->partitionForIndex( index ); Q_ASSERT( partition ); - QPointer<CreatePartitionDialog> dlg = new CreatePartitionDialog( model->device(), partition->parent(), getCurrentUsedMountpoints(), this ); + QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( model->device(), + partition->parent(), + getCurrentUsedMountpoints(), + this ); dlg->initFromFreeSpace( partition ); if ( dlg->exec() == QDialog::Accepted ) { @@ -269,7 +275,10 @@ PartitionPage::updatePartitionToCreate( Device* device, Partition* partition ) QStringList mountPoints = getCurrentUsedMountpoints(); mountPoints.removeOne( PartitionInfo::mountPoint( partition ) ); - QPointer<CreatePartitionDialog> dlg = new CreatePartitionDialog( device, partition->parent(), mountPoints, this ); + QPointer< CreatePartitionDialog > dlg = new CreatePartitionDialog( device, + partition->parent(), + mountPoints, + this ); dlg->initFromPartitionToCreate( partition ); if ( dlg->exec() == QDialog::Accepted ) { @@ -295,9 +304,13 @@ PartitionPage::editExistingPartition( Device* device, Partition* partition ) void PartitionPage::updateBootLoaderInstallPath() { + if ( m_isEfi || !m_ui->bootLoaderComboBox->isVisible() ) + return; + QVariant var = m_ui->bootLoaderComboBox->currentData( BootLoaderModel::BootLoaderPathRole ); if ( !var.isValid() ) return; + qDebug() << "PartitionPage::updateBootLoaderInstallPath" << var.toString(); m_core->setBootLoaderInstallPath( var.toString() ); } @@ -386,19 +399,19 @@ PartitionPage::updateBootLoaderIndex() QStringList PartitionPage::getCurrentUsedMountpoints() { - QModelIndex index = m_core->deviceModel()->index( m_ui->deviceComboBox->currentIndex(), 0 ); + QModelIndex index = m_core->deviceModel()->index( + m_ui->deviceComboBox->currentIndex(), 0 ); if ( !index.isValid() ) return QStringList(); Device* device = m_core->deviceModel()->deviceForIndex( index ); QStringList mountPoints; - for (Partition* partition : device->partitionTable()->children()) { + for ( Partition* partition : device->partitionTable()->children() ) + { const QString& mountPoint = PartitionInfo::mountPoint( partition ); - - if (!mountPoint.isEmpty()) { + if ( !mountPoint.isEmpty() ) mountPoints << mountPoint; - } } return mountPoints; diff --git a/src/modules/partition/gui/PartitionPage.h b/src/modules/partition/gui/PartitionPage.h index 59453ce18f5fa0f39dea6789fc41dbc149ba4c37..f998fe2aeff20fbf369a37dbc30290d7fb9594e1 100644 --- a/src/modules/partition/gui/PartitionPage.h +++ b/src/modules/partition/gui/PartitionPage.h @@ -66,6 +66,7 @@ private: QMutex m_revertMutex; int m_lastSelectedBootLoaderIndex; + bool m_isEfi; }; #endif // PARTITIONPAGE_H diff --git a/src/modules/partition/jobs/FillGlobalStorageJob.cpp b/src/modules/partition/jobs/FillGlobalStorageJob.cpp index 553b56b52d55b4a0a30ba91a9cc62dec77f0ff8a..db59528a440223ed64bb03e3a88503a3279272ce 100644 --- a/src/modules/partition/jobs/FillGlobalStorageJob.cpp +++ b/src/modules/partition/jobs/FillGlobalStorageJob.cpp @@ -198,10 +198,12 @@ FillGlobalStorageJob::exec() QVariant var = createBootLoaderMap(); if ( !var.isValid() ) cDebug() << "Failed to find path for boot loader"; + cDebug() << "FillGlobalStorageJob writing bootLoader path:" << var; storage->insert( "bootLoader", var ); } else { + cDebug() << "FillGlobalStorageJob writing empty bootLoader value"; storage->insert( "bootLoader", QVariant() ); } return Calamares::JobResult::ok(); diff --git a/src/modules/webview/WebViewStep.cpp b/src/modules/webview/WebViewStep.cpp index b1d50bf7cab6e41ad93eed021cef7e3c0c690e3e..069b52d5a8354ab5a78fa9725ef5d19063aad877 100644 --- a/src/modules/webview/WebViewStep.cpp +++ b/src/modules/webview/WebViewStep.cpp @@ -25,6 +25,7 @@ #include <QWebView> #else #include <QWebEngineView> +#include <QtWebEngine> #endif CALAMARES_PLUGIN_FACTORY_DEFINITION( WebViewStepFactory, registerPlugin<WebViewStep>(); ) @@ -33,6 +34,9 @@ WebViewStep::WebViewStep( QObject* parent ) : Calamares::ViewStep( parent ) { emit nextStatusChanged( true ); +#ifdef WEBVIEW_WITH_WEBENGINE + QtWebEngine::initialize(); +#endif m_view = new C_QWEBVIEW(); #ifdef WEBVIEW_WITH_WEBKIT m_view->settings()->setFontFamily( QWebSettings::StandardFont,