diff --git a/src/core/Config.cpp b/src/core/Config.cpp index ce57544286..8b2b16cf1a 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -138,6 +138,7 @@ static const QHash configStrings = { {Config::Security_ResetTouchId, {QS("Security/ResetTouchId"), Roaming, false}}, {Config::Security_ResetTouchIdTimeout, {QS("Security/ResetTouchIdTimeout"), Roaming, 30}}, {Config::Security_ResetTouchIdScreenlock,{QS("Security/ResetTouchIdScreenlock"), Roaming, true}}, + {Config::Security_NoConfirmMoveEntryToRecycleBin,{QS("Security/NoConfirmMoveEntryToRecycleBin"), Roaming, true}}, // Browser {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}}, diff --git a/src/core/Config.h b/src/core/Config.h index 5538046991..8b9a02a5fb 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -119,6 +119,7 @@ class Config : public QObject Security_ResetTouchId, Security_ResetTouchIdTimeout, Security_ResetTouchIdScreenlock, + Security_NoConfirmMoveEntryToRecycleBin, Browser_Enabled, Browser_ShowNotification, diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index 09fb0515db..182dcd0520 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -280,6 +280,8 @@ void ApplicationSettingsWidget::loadSettings() m_secUi->passwordsRepeatVisibleCheckBox->setChecked( config()->get(Config::Security_PasswordsRepeatVisible).toBool()); m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool()); + m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->setChecked( + config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()); m_secUi->touchIDResetCheckBox->setChecked(config()->get(Config::Security_ResetTouchId).toBool()); m_secUi->touchIDResetSpinBox->setValue(config()->get(Config::Security_ResetTouchIdTimeout).toInt()); @@ -379,6 +381,8 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::Security_HidePasswordPreviewPanel, m_secUi->passwordPreviewCleartextCheckBox->isChecked()); config()->set(Config::Security_PasswordsRepeatVisible, m_secUi->passwordsRepeatVisibleCheckBox->isChecked()); config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked()); + config()->set(Config::Security_NoConfirmMoveEntryToRecycleBin, + m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->isChecked()); config()->set(Config::Security_ResetTouchId, m_secUi->touchIDResetCheckBox->isChecked()); config()->set(Config::Security_ResetTouchIdTimeout, m_secUi->touchIDResetSpinBox->value()); diff --git a/src/gui/ApplicationSettingsWidgetSecurity.ui b/src/gui/ApplicationSettingsWidgetSecurity.ui index bd4af19fab..b338ffa869 100644 --- a/src/gui/ApplicationSettingsWidgetSecurity.ui +++ b/src/gui/ApplicationSettingsWidgetSecurity.ui @@ -257,6 +257,13 @@ + + + + Move entries to recycle bin without confirmation + + + diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index c96b2a6bde..ef1ed68ea0 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -571,6 +571,8 @@ bool DatabaseWidget::confirmDeleteEntries(QList entries, bool permanent) MessageBox::Cancel); return answer == MessageBox::Delete; + } else if (config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()) { + return true; } else { QString prompt; if (entries.size() == 1) { diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 68c1bfb26f..1de3c6bee2 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -1013,26 +1013,40 @@ void TestGui::testDeleteEntry() QVERIFY(entryDeleteWidget->isEnabled()); QVERIFY(!m_db->metadata()->recycleBin()); - MessageBox::setNextAnswer(MessageBox::Move); - QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); - - QCOMPARE(entryView->model()->rowCount(), 3); - QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + // Test with confirmation dialog + if (!config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()) { + MessageBox::setNextAnswer(MessageBox::Move); + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + + QCOMPARE(entryView->model()->rowCount(), 3); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + } else { + // no confirm dialog + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 3); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + } // Select multiple entries and move them to the recycling bin clickIndex(entryView->model()->index(1, 1), entryView, Qt::LeftButton); clickIndex(entryView->model()->index(2, 1), entryView, Qt::LeftButton, Qt::ControlModifier); QCOMPARE(entryView->selectionModel()->selectedRows().size(), 2); - MessageBox::setNextAnswer(MessageBox::Cancel); - QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); - QCOMPARE(entryView->model()->rowCount(), 3); - QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); - - MessageBox::setNextAnswer(MessageBox::Move); - QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); - QCOMPARE(entryView->model()->rowCount(), 1); - QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); + if (!config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()) { + MessageBox::setNextAnswer(MessageBox::Cancel); + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 3); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); + + MessageBox::setNextAnswer(MessageBox::Move); + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 1); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); + } else { + QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); + QCOMPARE(entryView->model()->rowCount(), 1); + QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); + } // Go to the recycling bin QCOMPARE(groupView->currentGroup(), m_db->rootGroup());