From 8a50ee8b220e7f83939506e8ac94422f0d7a771a Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Mon, 1 Aug 2016 00:22:04 +0200 Subject: [PATCH] Close database without asking when unmodified. Don't ask for confirmation when closing/locking a database and - it's in edit entry mode - there haven't been any modifications Refs #511 --- src/gui/DatabaseTabWidget.cpp | 4 ++-- src/gui/DatabaseWidget.cpp | 12 ++++++++++++ src/gui/DatabaseWidget.h | 1 + src/gui/entry/EditEntryWidget.cpp | 16 ++++++++++++++++ src/gui/entry/EditEntryWidget.h | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index 8f7350767..d9984d33c 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -223,7 +223,7 @@ bool DatabaseTabWidget::closeDatabase(Database* db) if (dbName.right(1) == "*") { dbName.chop(1); } - if (dbStruct.dbWidget->isInEditMode() && db->hasKey()) { + if (dbStruct.dbWidget->isInEditMode() && db->hasKey() && dbStruct.dbWidget->isEditWidgetModified()) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Close?"), @@ -654,7 +654,7 @@ void DatabaseTabWidget::lockDatabases() // show the correct tab widget before we are asking questions about it setCurrentWidget(dbWidget); - if (mode == DatabaseWidget::EditMode) { + if (mode == DatabaseWidget::EditMode && dbWidget->isEditWidgetModified()) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Lock database"), diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 4ff7a308e..8c3b2b9b5 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -194,6 +194,18 @@ bool DatabaseWidget::isInEditMode() const return currentMode() == DatabaseWidget::EditMode; } +bool DatabaseWidget::isEditWidgetModified() const +{ + if (currentWidget() == m_editEntryWidget) { + return m_editEntryWidget->hasBeenModified(); + } + else { + // other edit widget don't have a hasBeenModified() method yet + // assume that they already have been modified + return true; + } +} + QList DatabaseWidget::splitterSizes() const { return m_splitter->sizes(); diff --git a/src/gui/DatabaseWidget.h b/src/gui/DatabaseWidget.h index 38a685cc6..e49ee86f5 100644 --- a/src/gui/DatabaseWidget.h +++ b/src/gui/DatabaseWidget.h @@ -74,6 +74,7 @@ public: QStringList customEntryAttributes() const; bool isGroupSelected() const; bool isInEditMode() const; + bool isEditWidgetModified() const; QList splitterSizes() const; void setSplitterSizes(const QList& sizes); QList entryHeaderViewSizes() const; diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index fdd13eca3..4aded9a02 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -497,6 +497,22 @@ void EditEntryWidget::clear() m_iconsWidget->reset(); } +bool EditEntryWidget::hasBeenModified() const +{ + // entry has been modified if a history item is to be deleted + if (!m_historyModel->deletedEntries().isEmpty()) { + return true; + } + + // check if updating the entry would modify it + QScopedPointer entry(new Entry()); + entry->copyDataFrom(m_entry); + + entry->beginUpdate(); + updateEntryData(entry.data()); + return entry->endUpdate(); +} + void EditEntryWidget::togglePasswordGeneratorButton(bool checked) { m_mainUi->passwordGenerator->setVisible(checked); diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h index a13cecb82..c8045d93c 100644 --- a/src/gui/entry/EditEntryWidget.h +++ b/src/gui/entry/EditEntryWidget.h @@ -61,6 +61,7 @@ public: void createPresetsMenu(QMenu* expirePresetsMenu); QString entryTitle() const; void clear(); + bool hasBeenModified() const; Q_SIGNALS: void editFinished(bool accepted);