diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index d4a880dfe..3b5ae5f4a 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -2840,22 +2840,10 @@ Would you like to correct it? Notes field - - Toggle the checkbox to reveal the notes section. - - Username field - - Toggle notes visible - - - - Notes: - - Expiration field @@ -2872,14 +2860,6 @@ Would you like to correct it? Presets - - Password: - - - - URL: - - Url field @@ -2888,18 +2868,10 @@ Would you like to correct it? Download favicon for URL - - Title: - - Title field - - Username: - - Password field @@ -2908,18 +2880,42 @@ Would you like to correct it? Toggle expiration - - Expires: - - - - Tags: - - Tags list + + &Username: + + + + &Title: + + + + &Password: + + + + UR&L: + + + + &Notes: + + + + Toggle notes visibility + + + + T&ags: + + + + &Expires: + + EditEntryWidgetSSHAgent @@ -6207,6 +6203,10 @@ Do you want to overwrite it? Password quality + + Toggle password visibilty using Control + H. Open the password generator using Control + G. + + PickcharsDialog diff --git a/src/gui/EntryPreviewWidget.ui b/src/gui/EntryPreviewWidget.ui index 6e0ce5ec9..c251da3f5 100644 --- a/src/gui/EntryPreviewWidget.ui +++ b/src/gui/EntryPreviewWidget.ui @@ -6,7 +6,7 @@ 0 0 - 508 + 530 257 @@ -177,7 +177,7 @@ - 0 + 2 false @@ -753,7 +753,7 @@ Default Sequence - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing @@ -771,6 +771,9 @@ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + true + diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index ea2ab4fc3..aa9e33991 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -146,6 +146,9 @@ MainWindow::MainWindow() m_entryContextMenu->addAction(m_ui->actionEntryOpenUrl); m_entryContextMenu->addAction(m_ui->actionEntryDownloadIcon); m_entryContextMenu->addSeparator(); + m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent); + m_entryContextMenu->addAction(m_ui->actionEntryRemoveFromAgent); + m_entryContextMenu->addSeparator(); m_entryContextMenu->addAction(m_ui->actionEntryRestore); m_entryNewContextMenu = new QMenu(this); @@ -192,18 +195,8 @@ MainWindow::MainWindow() connect(sshAgent(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString))); connect(sshAgent(), SIGNAL(enabledChanged(bool)), this, SLOT(agentEnabled(bool))); m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage()); - - m_entryContextMenu->addSeparator(); - m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent); - m_entryContextMenu->addAction(m_ui->actionEntryRemoveFromAgent); - - m_ui->actionEntryAddToAgent->setIcon(icons()->icon("utilities-terminal")); - m_ui->actionEntryRemoveFromAgent->setIcon(icons()->icon("utilities-terminal")); #endif - m_ui->actionEntryAddToAgent->setVisible(false); - m_ui->actionEntryRemoveFromAgent->setVisible(false); - initViewMenu(); #if defined(WITH_XC_KEESHARE) @@ -289,6 +282,7 @@ MainWindow::MainWindow() m_ui->actionEntryMoveDown->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_Down); m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B); m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C); + m_ui->actionEntryCopyTitle->setShortcut(Qt::CTRL + Qt::Key_I); m_ui->actionEntryAutoTypeSequence->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_V); m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_U); m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::Key_U); @@ -322,6 +316,7 @@ MainWindow::MainWindow() m_ui->actionEntryAutoTypeSequence->setShortcutVisibleInContextMenu(true); m_ui->actionEntryOpenUrl->setShortcutVisibleInContextMenu(true); m_ui->actionEntryCopyURL->setShortcutVisibleInContextMenu(true); + m_ui->actionEntryCopyTitle->setShortcutVisibleInContextMenu(true); m_ui->actionEntryAddToAgent->setShortcutVisibleInContextMenu(true); m_ui->actionEntryRemoveFromAgent->setShortcutVisibleInContextMenu(true); #endif @@ -416,6 +411,8 @@ MainWindow::MainWindow() m_ui->actionEntryCopyPasswordTotp->setIcon(icons()->icon("totp-copy-password")); m_ui->actionEntryTotpQRCode->setIcon(icons()->icon("qrcode")); m_ui->actionEntrySetupTotp->setIcon(icons()->icon("totp-edit")); + m_ui->actionEntryAddToAgent->setIcon(icons()->icon("utilities-terminal")); + m_ui->actionEntryRemoveFromAgent->setIcon(icons()->icon("utilities-terminal")); m_ui->menuTags->setIcon(icons()->icon("tag-multiple")); m_ui->actionEntryDownloadIcon->setIcon(icons()->icon("favicon-download")); m_ui->actionGroupSortAsc->setIcon(icons()->icon("sort-alphabetical-ascending")); @@ -695,6 +692,7 @@ MainWindow::MainWindow() statusBar()->addPermanentWidget(m_statusBarLabel); restoreConfigState(); + setMenuActionState(); } MainWindow::~MainWindow() @@ -885,6 +883,7 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) bool inWelcomeWidget = (currentIndex == WelcomeScreen); bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; + m_ui->actionDatabaseClose->setEnabled(true); m_ui->actionDatabaseMerge->setEnabled(inDatabaseTabWidget); m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); @@ -1042,6 +1041,13 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) // Only disable the action in the database menu so that the // menu remains active in the toolbar, if necessary m_ui->actionLockDatabase->setEnabled(false); + // Never show in these modes + m_ui->actionEntryMoveUp->setVisible(false); + m_ui->actionEntryMoveDown->setVisible(false); + m_ui->actionEntryRestore->setVisible(false); + m_ui->actionEntryAddToAgent->setVisible(false); + m_ui->actionEntryRemoveFromAgent->setVisible(false); + m_ui->actionGroupEmptyRecycleBin->setVisible(false); m_searchWidgetAction->setEnabled(false); break; @@ -1049,7 +1055,6 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) default: Q_ASSERT(false); } - m_ui->actionDatabaseClose->setEnabled(true); } else { const auto entryActions = m_ui->menuEntries->actions(); for (auto action : entryActions) { @@ -1072,6 +1077,13 @@ void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) m_ui->actionExportCsv->setEnabled(false); m_ui->actionExportHtml->setEnabled(false); m_ui->actionDatabaseMerge->setEnabled(false); + // Hide entry-specific actions + m_ui->actionEntryMoveUp->setVisible(false); + m_ui->actionEntryMoveDown->setVisible(false); + m_ui->actionEntryRestore->setVisible(false); + m_ui->actionEntryAddToAgent->setVisible(false); + m_ui->actionEntryRemoveFromAgent->setVisible(false); + m_ui->actionGroupEmptyRecycleBin->setVisible(false); m_searchWidgetAction->setEnabled(false); } @@ -1415,7 +1427,7 @@ void MainWindow::keyPressEvent(QKeyEvent* event) } else if (event->key() == Qt::Key_F2) { dbWidget->focusOnEntries(true); return; - } else if (event->key() == Qt::Key_F3) { + } else if (event->key() == Qt::Key_F3 || event->key() == Qt::Key_F6) { focusSearchWidget(); return; } else if (event->key() == Qt::Key_Escape && dbWidget->isSearchActive()) { diff --git a/src/gui/PasswordWidget.ui b/src/gui/PasswordWidget.ui index 4419ad79b..34cae29e1 100644 --- a/src/gui/PasswordWidget.ui +++ b/src/gui/PasswordWidget.ui @@ -27,7 +27,11 @@ 0 - + + + Toggle password visibilty using Control + H. Open the password generator using Control + G. + + diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index b2977d6fd..af28bab68 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -168,7 +168,7 @@ void EditEntryWidget::setupMain() } }); - connect(m_mainUi->notesEnabled, SIGNAL(toggled(bool)), this, SLOT(toggleHideNotes(bool))); + connect(m_mainUi->revealNotesButton, &QToolButton::clicked, this, &EditEntryWidget::toggleHideNotes); m_mainUi->expirePresets->setMenu(createPresetsMenu()); connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*))); @@ -839,7 +839,7 @@ void EditEntryWidget::useExpiryPreset(QAction* action) void EditEntryWidget::toggleHideNotes(bool visible) { m_mainUi->notesEdit->setVisible(visible); - m_mainUi->notesHint->setVisible(!visible); + m_mainUi->revealNotesButton->setIcon(icons()->onOffIcon("password-show", visible)); } Entry* EditEntryWidget::currentEntry() const @@ -898,10 +898,10 @@ void EditEntryWidget::setForms(Entry* entry, bool restore) m_mainUi->tagsList->completion(m_db->tagList()); m_mainUi->expireCheck->setEnabled(!m_history); m_mainUi->expireDatePicker->setReadOnly(m_history); - m_mainUi->notesEnabled->setChecked(!config()->get(Config::Security_HideNotes).toBool()); + m_mainUi->revealNotesButton->setIcon(icons()->onOffIcon("password-show", false)); + m_mainUi->revealNotesButton->setVisible(config()->get(Config::Security_HideNotes).toBool()); m_mainUi->notesEdit->setReadOnly(m_history); m_mainUi->notesEdit->setVisible(!config()->get(Config::Security_HideNotes).toBool()); - m_mainUi->notesHint->setVisible(config()->get(Config::Security_HideNotes).toBool()); if (config()->get(Config::GUI_MonospaceNotes).toBool()) { m_mainUi->notesEdit->setFont(Font::fixedFont()); } else { diff --git a/src/gui/entry/EditEntryWidgetMain.ui b/src/gui/entry/EditEntryWidgetMain.ui index 19dbf31fd..6fe6637e7 100644 --- a/src/gui/entry/EditEntryWidgetMain.ui +++ b/src/gui/entry/EditEntryWidgetMain.ui @@ -6,7 +6,7 @@ 0 0 - 539 + 400 523 @@ -33,11 +33,11 @@ 0 0 - 539 + 400 523 - + 0 @@ -56,7 +56,37 @@ 8 - + + + + Title field + + + + + + + &Username: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + usernameComboBox + + + + + + + Qt::StrongFocus + + + Password field + + + + @@ -77,21 +107,34 @@ - - - - true - - - Toggle the checkbox to reveal the notes section. - - - Qt::AlignTop - - - + + + + &Title: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + titleEdit + + + + + + + &Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + passwordEdit + + + @@ -99,41 +142,34 @@ - - - - - - Toggle notes visible - - - Toggle notes visible - - - Notes: - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + + + Qt::StrongFocus + + + Tags list + + - - + + 8 + + + + Toggle expiration + + + Toggle expiration + + + + + + @@ -168,24 +204,17 @@ - - - - Password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - URL: + UR&L: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + urlEdit + @@ -215,80 +244,98 @@ - - - - Title: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Title field - - - - - - - Username: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Qt::StrongFocus - - - Password field - - - - - - - 0 - + + - - - Toggle expiration - - - Toggle expiration - + - Expires: + &Notes: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + notesEdit + + + + 6 + + + + + Qt::Horizontal + + + + 5 + 20 + + + + + + + + Toggle notes visibility + + + Toggle notes visibility + + + + 14 + 14 + + + + true + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + - Tags: + T&ags: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + tagsList + - - - - Qt::StrongFocus + + + + &Expires: - - Tags list + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + expireCheck @@ -325,7 +372,7 @@ expireCheck expireDatePicker expirePresets - notesEnabled + revealNotesButton notesEdit