diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index f8aa38d8..23192dc5 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -39,6 +39,12 @@ MainWindow::MainWindow() toggleViewAction->setText(tr("Show toolbar")); m_ui->menuView->addAction(toggleViewAction); + m_clearHistoryAction = new QAction("Clear history", m_ui->menuFile); + m_lastDatabasesActions = new QActionGroup(m_ui->menuRecentDatabases); + connect(m_clearHistoryAction, SIGNAL(triggered()), this, SLOT(clearLastDatabases())); + connect(m_lastDatabasesActions, SIGNAL(triggered(QAction*)), this, SLOT(openRecentDatabase(QAction*))); + connect(m_ui->menuRecentDatabases, SIGNAL(aboutToShow()), this, SLOT(updateLastDatabasesMenu())); + Qt::Key globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); Qt::KeyboardModifiers globalAutoTypeModifiers = static_cast( config()->get("GlobalAutoTypeModifiers").toInt()); @@ -145,6 +151,28 @@ MainWindow::~MainWindow() { } +void MainWindow::updateLastDatabasesMenu() { + m_ui->menuRecentDatabases->clear(); + + QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList(); + Q_FOREACH (const QString& database, lastDatabases) { + QAction* action = m_ui->menuRecentDatabases->addAction(database); + m_lastDatabasesActions->addAction(action); + } + m_ui->menuRecentDatabases->addSeparator(); + m_ui->menuRecentDatabases->addAction(m_clearHistoryAction); +} + +void MainWindow::openRecentDatabase(QAction* action) +{ + openDatabase(action->text()); +} + +void MainWindow::clearLastDatabases() +{ + config()->set("LastDatabases", QVariant()); +} + void MainWindow::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) { m_ui->tabWidget->openDatabase(fileName, pw, keyFile); diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 5c4f23e7..16ca7e36 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -18,6 +18,7 @@ #ifndef KEEPASSX_MAINWINDOW_H #define KEEPASSX_MAINWINDOW_H +#include #include #include "gui/DatabaseWidget.h" @@ -48,6 +49,9 @@ private Q_SLOTS: void switchToDatabases(); void switchToSettings(); void databaseTabChanged(int tabIndex); + void openRecentDatabase(QAction* action); + void clearLastDatabases(); + void updateLastDatabasesMenu(); private: static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); @@ -55,6 +59,8 @@ private: static const QString BaseWindowTitle; const QScopedPointer m_ui; + QAction* m_clearHistoryAction; + QActionGroup* m_lastDatabasesActions; Q_DISABLE_COPY(MainWindow) }; diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 337e400a..f699f9da 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -77,8 +77,14 @@ Database + + + Recent databases + + +