diff --git a/docs/images/enable_copy_dc.png b/docs/images/enable_copy_dc.png new file mode 100644 index 000000000..9e944f87c Binary files /dev/null and b/docs/images/enable_copy_dc.png differ diff --git a/docs/topics/UserInterface.adoc b/docs/topics/UserInterface.adoc index cc284a526..f9bca9896 100644 --- a/docs/topics/UserInterface.adoc +++ b/docs/topics/UserInterface.adoc @@ -46,6 +46,14 @@ For users with smaller screens or those who desire seeing more entries at once, .Compact mode comparison image::compact_mode_comparison.png[] +==== Copy entry Columns on Double Click +KeePassXC offers the possibility of copying certain entry columns, such as username and password, into your clipboard on double click, for a limited period of time. + +This feature can be enabled by checking the box "Enable double click to copy some entry columns" in the security settings: + +.Enable copying on double click +image::enable_copy_dc.png[] + === Keyboard Shortcuts include::KeyboardShortcuts.adoc[tag=content, leveloffset=+1] diff --git a/src/core/Config.cpp b/src/core/Config.cpp index b0b49f947..8dd060722 100644 --- a/src/core/Config.cpp +++ b/src/core/Config.cpp @@ -140,6 +140,7 @@ static const QHash configStrings = { {Config::Security_ResetTouchIdTimeout, {QS("Security/ResetTouchIdTimeout"), Roaming, 30}}, {Config::Security_ResetTouchIdScreenlock,{QS("Security/ResetTouchIdScreenlock"), Roaming, true}}, {Config::Security_NoConfirmMoveEntryToRecycleBin,{QS("Security/NoConfirmMoveEntryToRecycleBin"), Roaming, true}}, + {Config::Security_EnableCopyOnDoubleClick,{QS("Security/EnableCopyOnDoubleClick"), Roaming, false}}, // Browser {Config::Browser_Enabled, {QS("Browser/Enabled"), Roaming, false}}, diff --git a/src/core/Config.h b/src/core/Config.h index e65709961..5b480f084 100644 --- a/src/core/Config.h +++ b/src/core/Config.h @@ -121,6 +121,7 @@ public: Security_ResetTouchIdTimeout, Security_ResetTouchIdScreenlock, Security_NoConfirmMoveEntryToRecycleBin, + Security_EnableCopyOnDoubleClick, Browser_Enabled, Browser_ShowNotification, diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp index 8fcb85cd8..e2363dbf3 100644 --- a/src/gui/ApplicationSettingsWidget.cpp +++ b/src/gui/ApplicationSettingsWidget.cpp @@ -286,6 +286,8 @@ void ApplicationSettingsWidget::loadSettings() m_secUi->hideNotesCheckBox->setChecked(config()->get(Config::Security_HideNotes).toBool()); m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->setChecked( config()->get(Config::Security_NoConfirmMoveEntryToRecycleBin).toBool()); + m_secUi->EnableCopyOnDoubleClickCheckBox->setChecked( + config()->get(Config::Security_EnableCopyOnDoubleClick).toBool()); m_secUi->touchIDResetCheckBox->setChecked(config()->get(Config::Security_ResetTouchId).toBool()); m_secUi->touchIDResetSpinBox->setValue(config()->get(Config::Security_ResetTouchIdTimeout).toInt()); @@ -387,6 +389,7 @@ void ApplicationSettingsWidget::saveSettings() config()->set(Config::Security_HideNotes, m_secUi->hideNotesCheckBox->isChecked()); config()->set(Config::Security_NoConfirmMoveEntryToRecycleBin, m_secUi->NoConfirmMoveEntryToRecycleBinCheckBox->isChecked()); + config()->set(Config::Security_EnableCopyOnDoubleClick, m_secUi->EnableCopyOnDoubleClickCheckBox->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 b338ffa86..deab7a6ac 100644 --- a/src/gui/ApplicationSettingsWidgetSecurity.ui +++ b/src/gui/ApplicationSettingsWidgetSecurity.ui @@ -264,6 +264,13 @@ + + + + Enable double click to copy the username/password entry columns + + + diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 737a4a2f6..e674e93ae 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -1195,10 +1195,18 @@ void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::Mod // Implement 'copy-on-doubleclick' functionality for certain columns switch (column) { case EntryModel::Username: - setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->username())); + if (config()->get(Config::Security_EnableCopyOnDoubleClick).toBool()) { + setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->username())); + } else { + switchToEntryEdit(entry); + } break; case EntryModel::Password: - setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->password())); + if (config()->get(Config::Security_EnableCopyOnDoubleClick).toBool()) { + setClipboardTextAndMinimize(entry->resolveMultiplePlaceholders(entry->password())); + } else { + switchToEntryEdit(entry); + } break; case EntryModel::Url: if (!entry->url().isEmpty()) {