diff --git a/src/gui/editmountpointdialog.h b/src/gui/editmountpointdialog.h --- a/src/gui/editmountpointdialog.h +++ b/src/gui/editmountpointdialog.h @@ -28,6 +28,12 @@ class QWidget; class QString; +enum MountPointAction +{ + Remove = 1, + Edit = 2 +}; + class EditMountPointDialog : public QDialog { public: @@ -39,7 +45,7 @@ return *m_DialogWidget; } - void accept() override; + void accept_(MountPointAction action); private: Partition& partition() { diff --git a/src/gui/editmountpointdialog.cpp b/src/gui/editmountpointdialog.cpp --- a/src/gui/editmountpointdialog.cpp +++ b/src/gui/editmountpointdialog.cpp @@ -49,19 +49,20 @@ this ); mainLayout->addWidget(dbb); connect(dbb, &QDialogButtonBox::accepted, - this, &EditMountPointDialog::accept); + this, [=] () {accept_(Edit);} ); connect(dbb, &QDialogButtonBox::rejected, this, &EditMountPointDialog::reject); + connect(widget().m_ButtonRemove, &QPushButton::clicked, this, [=] () {accept_(Remove);} ); } -/** Destroys an EditMOuntOptionsDialog instance */ +/** Destroys an EditMountOptionsDialog instance */ EditMountPointDialog::~EditMountPointDialog() { KConfigGroup kcg(KSharedConfig::openConfig(), "editMountPointDialog"); kcg.writeEntry("Geometry", saveGeometry()); } -void EditMountPointDialog::accept() +void EditMountPointDialog::accept_(MountPointAction action) { if (KMessageBox::warningContinueCancel(this, xi18nc("@info", "Are you sure you want to save the changes you made to the system table file /etc/fstab?" @@ -71,10 +72,14 @@ KStandardGuiItem::cancel(), QStringLiteral("reallyWriteMountPoints")) == KMessageBox::Cancel) return; - - widget().acceptChanges(); - if (writeMountpoints(widget().fstabEntries())) - partition().setMountPoint(widget().editPath().text()); + if(action == Remove) + widget().removeMountPoint(); + else if (action == Edit) + widget().acceptChanges(); + if (writeMountpoints(widget().fstabEntries())) { + if (action == Edit) + partition().setMountPoint(widget().editPath().text()); + } else KMessageBox::sorry(this, xi18nc("@info", "Could not save mount points to file /etc/fstab."), diff --git a/src/gui/editmountpointdialogwidget.h b/src/gui/editmountpointdialogwidget.h --- a/src/gui/editmountpointdialogwidget.h +++ b/src/gui/editmountpointdialogwidget.h @@ -39,7 +39,7 @@ class EditMountPointDialogWidget : public QWidget, public Ui::EditMountPointDialogWidgetBase { public: - EditMountPointDialogWidget(QWidget* parent, const Partition& p); + EditMountPointDialogWidget(QWidget* parent, Partition& p); ~EditMountPointDialogWidget(); QPushButton& buttonMore() { @@ -75,6 +75,7 @@ } void acceptChanges(); + void removeMountPoint(); bool writeMountpoints(const QString& filename); protected: @@ -90,15 +91,19 @@ return m_BoxOptions; } + Partition& partition() { + return m_Partition; + } + const Partition& partition() const { return m_Partition; } private: FstabEntryList m_fstabEntries; FstabEntry *entry; - const Partition& m_Partition; + Partition& m_Partition; QString m_Options; QString m_deviceNode; std::map m_BoxOptions; diff --git a/src/gui/editmountpointdialogwidget.cpp b/src/gui/editmountpointdialogwidget.cpp --- a/src/gui/editmountpointdialogwidget.cpp +++ b/src/gui/editmountpointdialogwidget.cpp @@ -33,7 +33,7 @@ #include #include -EditMountPointDialogWidget::EditMountPointDialogWidget(QWidget* parent, const Partition& p) : +EditMountPointDialogWidget::EditMountPointDialogWidget(QWidget* parent, Partition& p) : QWidget(parent), m_Partition(p) { @@ -159,6 +159,22 @@ editPath().setText(s); } +void EditMountPointDialogWidget::removeMountPoint() +{ + int i=0; + for (const auto &e : fstabEntries()) { + if(e.fsSpec().contains(partition().deviceNode()) || e.fsSpec().contains(partition().fileSystem().uuid()) || + e.fsSpec().contains(partition().fileSystem().label()) || e.fsSpec().contains(partition().label()) || e.fsSpec().contains(partition().uuid()) ) + { + fstabEntries().removeAt(i); + partition().setMountPoint(QString()); + i--; + } + i++; + } + +} + void EditMountPointDialogWidget::buttonMoreClicked(bool) { QPointer dlg = new EditMountOptionsDialog(this, m_Options.split(QLatin1Char(','))); diff --git a/src/gui/editmountpointdialogwidgetbase.ui b/src/gui/editmountpointdialogwidgetbase.ui --- a/src/gui/editmountpointdialogwidgetbase.ui +++ b/src/gui/editmountpointdialogwidgetbase.ui @@ -6,25 +6,12 @@ 0 0 - 534 - 353 + 600 + 374 - - - - Path: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - m_EditPath - - - - + @@ -34,16 +21,16 @@ - - - - - 1 - 0 - - + + - Select... + Path: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + m_EditPath @@ -146,7 +133,7 @@ - Dump Frequency: + Dump &Frequency: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -175,7 +162,7 @@ - Pass Number: + Pass &Number: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -188,19 +175,6 @@ - - - - Qt::Horizontal - - - - 135 - 23 - - - - @@ -282,7 +256,7 @@ - Device Node + De&vice Node true @@ -292,14 +266,14 @@ - UUID + UU&ID - Label + &Label @@ -313,6 +287,45 @@ + + + + Qt::Horizontal + + + + 135 + 23 + + + + + + + + + 1 + 0 + + + + Select... + + + + + + + + 1 + 0 + + + + Remove + + + diff --git a/src/gui/partitionmanagerwidget.cpp b/src/gui/partitionmanagerwidget.cpp --- a/src/gui/partitionmanagerwidget.cpp +++ b/src/gui/partitionmanagerwidget.cpp @@ -177,11 +177,7 @@ if (selectedDevice() == nullptr || selectedDevice()->partitionTable() == nullptr || partTableWidget().activeWidget() == nullptr) return nullptr; - // The active partition we get from the part table widget is const; we need non-const. - // So take the first sector and find the partition in the selected device's - // partition table. - const Partition* activePartition = partTableWidget().activeWidget()->partition(); - return selectedDevice()->partitionTable()->findPartitionBySector(activePartition->firstSector(), PartitionRole(PartitionRole::Any)); + return partTableWidget().activeWidget()->partition(); } void PartitionManagerWidget::setSelectedDevice(const QString& deviceNode)