From 6c02c745393bea9be648088d62d41e80537530a5 Mon Sep 17 00:00:00 2001 From: Carlo Teubner Date: Sat, 15 Jun 2024 20:59:16 +0100 Subject: [PATCH] MainWindow: move shortcuts from .cpp to .ui file (#10903) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * MainWindow: change Clone Entry shortcut to Ctrl+D from Ctrl+K * MainWindow: move shortcuts from .cpp to .ui file The only shortcuts defined in the .cpp file are ones that can't be defined in the .ui file, because they are in some way conditional. This also reduces the number of compiler warnings of the kind: warning: arithmetic between different enumeration types ‘Qt::Modifier’ and ‘Qt::Key’ is deprecated [-Wdeprecated-enum-enum-conversion] with recent GCC versions. --- src/gui/ActionCollection.cpp | 6 +-- src/gui/ActionCollection.h | 2 +- src/gui/MainWindow.cpp | 73 ++++++++++-------------------- src/gui/MainWindow.ui | 87 ++++++++++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 55 deletions(-) diff --git a/src/gui/ActionCollection.cpp b/src/gui/ActionCollection.cpp index d18fb4ce3..3db86a899 100644 --- a/src/gui/ActionCollection.cpp +++ b/src/gui/ActionCollection.cpp @@ -61,14 +61,10 @@ void ActionCollection::setDefaultShortcut(QAction* action, const QKeySequence& s setDefaultShortcuts(action, {shortcut}); } -void ActionCollection::setDefaultShortcut(QAction* action, - QKeySequence::StandardKey standard, - const QKeySequence& fallback) +void ActionCollection::setDefaultShortcut(QAction* action, QKeySequence::StandardKey standard) { if (!QKeySequence::keyBindings(standard).isEmpty()) { setDefaultShortcuts(action, QKeySequence::keyBindings(standard)); - } else if (fallback != 0) { - setDefaultShortcut(action, QKeySequence(fallback)); } } diff --git a/src/gui/ActionCollection.h b/src/gui/ActionCollection.h index ab0d40029..c9045b552 100644 --- a/src/gui/ActionCollection.h +++ b/src/gui/ActionCollection.h @@ -44,7 +44,7 @@ public: QList defaultShortcuts(const QAction* a) const; void setDefaultShortcut(QAction* a, const QKeySequence& shortcut); - void setDefaultShortcut(QAction* a, QKeySequence::StandardKey standard, const QKeySequence& fallback); + void setDefaultShortcut(QAction* a, QKeySequence::StandardKey standard); void setDefaultShortcuts(QAction* a, const QList& shortcut); // Check if any action conflicts with @p seq and return the conflicting action diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 7229ef92b..a6a3515b4 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -992,17 +992,17 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) case DatabaseWidget::Mode::LockedMode: { // Enable select actions when editing an entry bool editEntryActive = dbWidget->isEntryEditActive(); - const auto editEntryActionsMask = QList({m_ui->actionEntryCopyUsername, - m_ui->actionEntryCopyPassword, - m_ui->actionEntryCopyURL, - m_ui->actionEntryOpenUrl, - m_ui->actionEntryAutoType, - m_ui->actionEntryDownloadIcon, - m_ui->actionEntryCopyNotes, - m_ui->actionEntryCopyTitle, - m_ui->menuEntryCopyAttribute->menuAction(), - m_ui->menuEntryTotp->menuAction(), - m_ui->actionEntrySetupTotp}); + const QList editEntryActionsMask{m_ui->actionEntryCopyUsername, + m_ui->actionEntryCopyPassword, + m_ui->actionEntryCopyURL, + m_ui->actionEntryOpenUrl, + m_ui->actionEntryAutoType, + m_ui->actionEntryDownloadIcon, + m_ui->actionEntryCopyNotes, + m_ui->actionEntryCopyTitle, + m_ui->menuEntryCopyAttribute->menuAction(), + m_ui->menuEntryTotp->menuAction(), + m_ui->actionEntrySetupTotp}; auto entryActions = m_ui->menuEntries->actions(); entryActions << m_ui->menuEntryCopyAttribute->actions(); @@ -2190,55 +2190,30 @@ void MainWindow::initActionCollection() m_ui->actionBugReport, m_ui->actionAbout}); - // Add actions whose shortcuts were set in the .ui file + // Register as default any shortcuts that were set in the .ui file for (const auto action : ac->actions()) { if (!action->shortcut().isEmpty()) { ac->setDefaultShortcut(action, action->shortcut()); } } - // Actions with standard shortcuts - ac->setDefaultShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open, Qt::CTRL + Qt::Key_O); - ac->setDefaultShortcut(m_ui->actionDatabaseSave, QKeySequence::Save, Qt::CTRL + Qt::Key_S); - ac->setDefaultShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs, Qt::CTRL + Qt::SHIFT + Qt::Key_S); - ac->setDefaultShortcut(m_ui->actionDatabaseClose, QKeySequence::Close, Qt::CTRL + Qt::Key_W); - ac->setDefaultShortcut(m_ui->actionSettings, QKeySequence::Preferences, Qt::CTRL + Qt::Key_Comma); - ac->setDefaultShortcut(m_ui->actionQuit, QKeySequence::Quit, Qt::CTRL + Qt::Key_Q); - ac->setDefaultShortcut(m_ui->actionEntryNew, QKeySequence::New, Qt::CTRL + Qt::Key_N); + // Actions with standard shortcuts (if no standard shortcut exists, leave the existing + // shortcuts from the .ui file in place) + ac->setDefaultShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open); + ac->setDefaultShortcut(m_ui->actionDatabaseSave, QKeySequence::Save); + ac->setDefaultShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs); + ac->setDefaultShortcut(m_ui->actionDatabaseClose, QKeySequence::Close); + ac->setDefaultShortcut(m_ui->actionSettings, QKeySequence::Preferences); + ac->setDefaultShortcut(m_ui->actionQuit, QKeySequence::Quit); + ac->setDefaultShortcut(m_ui->actionEntryNew, QKeySequence::New); // Prevent conflicts with global Mac shortcuts (force Control on all platforms) + // Note: Qt::META means Ctrl on Mac. #ifdef Q_OS_MAC - auto modifier = Qt::META; -#else - auto modifier = Qt::CTRL; + ac->setDefaultShortcut(m_ui->actionEntryAddToAgent, Qt::META + Qt::Key_H); + ac->setDefaultShortcut(m_ui->actionEntryRemoveFromAgent, Qt::META + Qt::SHIFT + Qt::Key_H); #endif - // All other actions with default shortcuts - ac->setDefaultShortcut(m_ui->actionDatabaseNew, Qt::CTRL + Qt::SHIFT + Qt::Key_N); - ac->setDefaultShortcut(m_ui->actionDatabaseSettings, Qt::CTRL + Qt::SHIFT + Qt::Key_Comma); - ac->setDefaultShortcut(m_ui->actionReports, Qt::CTRL + Qt::SHIFT + Qt::Key_R); - ac->setDefaultShortcut(m_ui->actionLockDatabase, Qt::CTRL + Qt::Key_L); - ac->setDefaultShortcut(m_ui->actionLockAllDatabases, Qt::CTRL + Qt::SHIFT + Qt::Key_L); - ac->setDefaultShortcut(m_ui->actionEntryEdit, Qt::CTRL + Qt::Key_E); - ac->setDefaultShortcut(m_ui->actionEntryDelete, Qt::CTRL + Qt::Key_D); - ac->setDefaultShortcut(m_ui->actionEntryDelete, Qt::Key_Delete); - ac->setDefaultShortcut(m_ui->actionEntryClone, Qt::CTRL + Qt::Key_K); - ac->setDefaultShortcut(m_ui->actionEntryTotp, Qt::CTRL + Qt::SHIFT + Qt::Key_T); - ac->setDefaultShortcut(m_ui->actionEntryDownloadIcon, Qt::CTRL + Qt::SHIFT + Qt::Key_D); - ac->setDefaultShortcut(m_ui->actionEntryCopyTotp, Qt::CTRL + Qt::Key_T); - ac->setDefaultShortcut(m_ui->actionEntryCopyPasswordTotp, Qt::CTRL + Qt::Key_Y); - ac->setDefaultShortcut(m_ui->actionEntryMoveUp, Qt::CTRL + Qt::ALT + Qt::Key_Up); - ac->setDefaultShortcut(m_ui->actionEntryMoveDown, Qt::CTRL + Qt::ALT + Qt::Key_Down); - ac->setDefaultShortcut(m_ui->actionEntryCopyUsername, Qt::CTRL + Qt::Key_B); - ac->setDefaultShortcut(m_ui->actionEntryCopyPassword, Qt::CTRL + Qt::Key_C); - ac->setDefaultShortcut(m_ui->actionEntryCopyTitle, Qt::CTRL + Qt::Key_I); - ac->setDefaultShortcut(m_ui->actionEntryAutoTypeSequence, Qt::CTRL + Qt::SHIFT + Qt::Key_V); - ac->setDefaultShortcut(m_ui->actionEntryOpenUrl, Qt::CTRL + Qt::SHIFT + Qt::Key_U); - ac->setDefaultShortcut(m_ui->actionEntryCopyURL, Qt::CTRL + Qt::Key_U); - ac->setDefaultShortcut(m_ui->actionEntryRestore, Qt::CTRL + Qt::Key_R); - ac->setDefaultShortcut(m_ui->actionEntryAddToAgent, modifier + Qt::Key_H); - ac->setDefaultShortcut(m_ui->actionEntryRemoveFromAgent, modifier + Qt::SHIFT + Qt::Key_H); - QTimer::singleShot(1, ac, &ActionCollection::restoreShortcuts); } diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index c1a0133a5..7708df2f3 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -447,6 +447,9 @@ Quit Application + + Ctrl+Q + QAction::QuitRole @@ -477,6 +480,9 @@ Open Database + + Ctrl+O + @@ -485,6 +491,9 @@ &Save Database + + Ctrl+S + @@ -493,6 +502,9 @@ &Close Database + + Ctrl+W + @@ -501,6 +513,9 @@ Create Database + + Ctrl+Shift+N + @@ -520,6 +535,9 @@ Create Entry + + Ctrl+N + @@ -531,6 +549,9 @@ Edit Entry + + Ctrl+E + @@ -542,6 +563,9 @@ Delete Entry + + Del + @@ -619,6 +643,9 @@ Save Database As + + Ctrl+Shift+S + @@ -641,6 +668,9 @@ Show Database Reports + + Ctrl+Shift+R + QAction::NoRole @@ -655,6 +685,9 @@ Show Database Settings + + Ctrl+Shift+, + QAction::NoRole @@ -697,6 +730,9 @@ Clone Entry + + Ctrl+D + @@ -708,6 +744,9 @@ Move Entry Up + + Alt+Up + @@ -719,6 +758,9 @@ Move Entry Down + + Alt+Down + @@ -730,6 +772,9 @@ Copy Username + + Ctrl+B + @@ -741,6 +786,9 @@ Copy Password + + Ctrl+C + @@ -752,6 +800,9 @@ Show Application Settings + + Ctrl+, + QAction::PreferencesRole @@ -865,6 +916,9 @@ Download &Favicon + + Ctrl+Shift+D + @@ -873,6 +927,9 @@ Open &URL + + Ctrl+Shift+U + @@ -881,6 +938,9 @@ &Lock Database + + Ctrl+L + @@ -889,6 +949,9 @@ Lock &All Databases + + Ctrl+Shift+L + @@ -900,6 +963,9 @@ Copy Title + + Ctrl+I + @@ -911,6 +977,9 @@ Copy URL + + Ctrl+U + @@ -973,6 +1042,9 @@ Show TOTP + + Ctrl+Shift+T + @@ -994,11 +1066,17 @@ Copy &TOTP + + Ctrl+T + Copy Password and TOTP + + Ctrl+Y + @@ -1080,6 +1158,9 @@ SSH Agent: Add Key + + Ctrl+H + @@ -1088,6 +1169,9 @@ SSH Agent: Remove Key + + Ctrl+Shift+H + @@ -1244,6 +1328,9 @@ Perform Auto-Type: Entry Default + + Ctrl+Shift+V +