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)