From dab6d9408e7e37ec86cf679efd86116994ffd201 Mon Sep 17 00:00:00 2001
From: Jonathan White <support@dmapps.us>
Date: Mon, 4 Jul 2022 15:59:41 -0400
Subject: [PATCH] Add setting for number of recent files

* Expose setting to limit the number of recent files. Default is still 5, can be set from 1 to 25.
* Also fix tab order on settings page
---
 share/translations/keepassxc_en.ts          |  4 ++
 src/gui/ApplicationSettingsWidget.cpp       |  3 ++
 src/gui/ApplicationSettingsWidgetGeneral.ui | 59 +++++++++++++++++----
 3 files changed, 57 insertions(+), 9 deletions(-)

diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts
index 90b8de4d8..f4b63fd3f 100644
--- a/share/translations/keepassxc_en.ts
+++ b/share/translations/keepassxc_en.ts
@@ -495,6 +495,10 @@
         <source>Remember last typed entry for:</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source> recent files</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ApplicationSettingsWidgetSecurity</name>
diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp
index 9dd9e3df8..12578d8f9 100644
--- a/src/gui/ApplicationSettingsWidget.cpp
+++ b/src/gui/ApplicationSettingsWidget.cpp
@@ -191,6 +191,7 @@ void ApplicationSettingsWidget::loadSettings()
     m_generalUi->singleInstanceCheckBox->setChecked(config()->get(Config::SingleInstance).toBool());
     m_generalUi->launchAtStartup->setChecked(osUtils->isLaunchAtStartupEnabled());
     m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get(Config::RememberLastDatabases).toBool());
+    m_generalUi->rememberLastDatabasesSpinbox->setValue(config()->get(Config::NumberOfRememberedLastDatabases).toInt());
     m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get(Config::RememberLastKeyFiles).toBool());
     m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(
         config()->get(Config::OpenPreviousDatabasesOnStartup).toBool());
@@ -336,6 +337,7 @@ void ApplicationSettingsWidget::saveSettings()
 
     config()->set(Config::SingleInstance, m_generalUi->singleInstanceCheckBox->isChecked());
     config()->set(Config::RememberLastDatabases, m_generalUi->rememberLastDatabasesCheckBox->isChecked());
+    config()->set(Config::NumberOfRememberedLastDatabases, m_generalUi->rememberLastDatabasesSpinbox->value());
     config()->set(Config::RememberLastKeyFiles, m_generalUi->rememberLastKeyFilesCheckBox->isChecked());
     config()->set(Config::OpenPreviousDatabasesOnStartup,
                   m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked());
@@ -520,6 +522,7 @@ void ApplicationSettingsWidget::rememberDatabasesToggled(bool checked)
         m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked(false);
     }
 
+    m_generalUi->rememberLastDatabasesSpinbox->setEnabled(checked);
     m_generalUi->rememberLastKeyFilesCheckBox->setEnabled(checked);
     m_generalUi->openPreviousDatabasesOnStartupCheckBox->setEnabled(checked);
 }
diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui
index 2260efb20..0a67c57b7 100644
--- a/src/gui/ApplicationSettingsWidgetGeneral.ui
+++ b/src/gui/ApplicationSettingsWidgetGeneral.ui
@@ -113,14 +113,47 @@
                </widget>
               </item>
               <item>
-               <widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
-                <property name="text">
-                 <string>Remember previously used databases</string>
-                </property>
-                <property name="checked">
-                 <bool>true</bool>
-                </property>
-               </widget>
+               <layout class="QHBoxLayout" name="horizontalLayout_6">
+                <item>
+                 <widget class="QCheckBox" name="rememberLastDatabasesCheckBox">
+                  <property name="text">
+                   <string>Remember previously used databases</string>
+                  </property>
+                  <property name="checked">
+                   <bool>true</bool>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <widget class="QSpinBox" name="rememberLastDatabasesSpinbox">
+                  <property name="suffix">
+                   <string> recent files</string>
+                  </property>
+                  <property name="minimum">
+                   <number>1</number>
+                  </property>
+                  <property name="maximum">
+                   <number>25</number>
+                  </property>
+                  <property name="value">
+                   <number>5</number>
+                  </property>
+                 </widget>
+                </item>
+                <item>
+                 <spacer name="horizontalSpacer_9">
+                  <property name="orientation">
+                   <enum>Qt::Horizontal</enum>
+                  </property>
+                  <property name="sizeHint" stdset="0">
+                   <size>
+                    <width>40</width>
+                    <height>20</height>
+                   </size>
+                  </property>
+                 </spacer>
+                </item>
+               </layout>
               </item>
               <item>
                <layout class="QHBoxLayout" name="rememberDbSubLayout_2">
@@ -1231,6 +1264,7 @@
   <tabstop>systrayMinimizeOnStartup</tabstop>
   <tabstop>minimizeAfterUnlockCheckBox</tabstop>
   <tabstop>rememberLastDatabasesCheckBox</tabstop>
+  <tabstop>rememberLastDatabasesSpinbox</tabstop>
   <tabstop>openPreviousDatabasesOnStartupCheckBox</tabstop>
   <tabstop>rememberLastKeyFilesCheckBox</tabstop>
   <tabstop>checkForUpdatesOnStartupCheckBox</tabstop>
@@ -1240,8 +1274,12 @@
   <tabstop>autoSaveAfterEveryChangeCheckBox</tabstop>
   <tabstop>autoSaveOnExitCheckBox</tabstop>
   <tabstop>autoSaveNonDataChangesCheckBox</tabstop>
+  <tabstop>autoReloadOnChangeCheckBox</tabstop>
   <tabstop>backupBeforeSaveCheckBox</tabstop>
+  <tabstop>backupFilePath</tabstop>
+  <tabstop>backupFilePathPicker</tabstop>
   <tabstop>useAlternativeSaveCheckBox</tabstop>
+  <tabstop>alternativeSaveComboBox</tabstop>
   <tabstop>useGroupIconOnEntryCreationCheckBox</tabstop>
   <tabstop>minimizeOnOpenUrlCheckBox</tabstop>
   <tabstop>hideWindowOnCopyCheckBox</tabstop>
@@ -1250,8 +1288,8 @@
   <tabstop>faviconTimeoutSpinBox</tabstop>
   <tabstop>languageComboBox</tabstop>
   <tabstop>toolButtonStyleComboBox</tabstop>
-  <tabstop>monospaceNotesCheckBox</tabstop>
   <tabstop>toolbarMovableCheckBox</tabstop>
+  <tabstop>monospaceNotesCheckBox</tabstop>
   <tabstop>minimizeOnCloseCheckBox</tabstop>
   <tabstop>systrayShowCheckBox</tabstop>
   <tabstop>trayIconAppearance</tabstop>
@@ -1260,7 +1298,10 @@
   <tabstop>autoTypeEntryTitleMatchCheckBox</tabstop>
   <tabstop>autoTypeEntryURLMatchCheckBox</tabstop>
   <tabstop>autoTypeAskCheckBox</tabstop>
+  <tabstop>autoTypeHideExpiredEntryCheckBox</tabstop>
+  <tabstop>autoTypeRelockDatabaseCheckBox</tabstop>
   <tabstop>autoTypeShortcutWidget</tabstop>
+  <tabstop>autoTypeRetypeTimeSpinBox</tabstop>
   <tabstop>autoTypeStartDelaySpinBox</tabstop>
   <tabstop>autoTypeDelaySpinBox</tabstop>
  </tabstops>