diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index 93cb44a5..a5a485ff 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -21,6 +21,7 @@ #include #include +#include "autotype/AutoType.h" #include "core/Config.h" #include "core/Database.h" #include "core/Group.h" @@ -52,6 +53,7 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int))); connect(this, SIGNAL(currentChanged(int)), SLOT(emitEntrySelectionChanged())); + connect(autoType(), SIGNAL(globalShortcutTriggered()), SLOT(performGlobalAutoType())); } DatabaseTabWidget::~DatabaseTabWidget() @@ -604,3 +606,8 @@ void DatabaseTabWidget::connectDatabase(Database* newDb, Database* oldDb) connect(newDb, SIGNAL(modified()), SLOT(modified())); newDb->setEmitModified(true); } + +void DatabaseTabWidget::performGlobalAutoType() +{ + autoType()->performGlobalAutoType(m_dbList.keys()); +} diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h index e88e53c6..eba81044 100644 --- a/src/gui/DatabaseTabWidget.h +++ b/src/gui/DatabaseTabWidget.h @@ -79,6 +79,7 @@ public Q_SLOTS: void deleteGroup(); void toggleSearch(); bool readOnly(int index = -1); + void performGlobalAutoType(); Q_SIGNALS: void entrySelectionChanged(bool singleEntrySelected); diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 8e322dd6..60b0a3c5 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -20,6 +20,8 @@ #include +#include "autotype/AutoType.h" +#include "core/Config.h" #include "core/Database.h" #include "core/DataPath.h" #include "core/Metadata.h" @@ -37,6 +39,13 @@ MainWindow::MainWindow() toggleViewAction->setText(tr("Show toolbar")); m_ui->menuView->addAction(toggleViewAction); + Qt::Key globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); + Qt::KeyboardModifiers globalAutoTypeModifiers = static_cast( + config()->get("GlobalAutoTypeModifiers").toInt()); + if (globalAutoTypeKey > 0 && globalAutoTypeModifiers > 0) { + autoType()->registerGlobalShortcut(globalAutoTypeKey, globalAutoTypeModifiers); + } + setShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open, Qt::CTRL + Qt::Key_O); setShortcut(m_ui->actionDatabaseSave, QKeySequence::Save, Qt::CTRL + Qt::Key_S); setShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs); diff --git a/src/gui/SettingsWidget.cpp b/src/gui/SettingsWidget.cpp index 46926bcc..197cd747 100644 --- a/src/gui/SettingsWidget.cpp +++ b/src/gui/SettingsWidget.cpp @@ -19,6 +19,7 @@ #include "ui_SettingsWidgetGeneral.h" #include "ui_SettingsWidgetSecurity.h" +#include "autotype/AutoType.h" #include "core/Config.h" SettingsWidget::SettingsWidget(QWidget* parent) @@ -55,6 +56,13 @@ void SettingsWidget::loadSettings() m_generalUi->modifiedExpandedChangedCheckBox->setChecked(config()->get("ModifiedOnExpandedStateChanges").toBool()); m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get("AutoSaveAfterEveryChange").toBool()); m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get("AutoSaveOnExit").toBool()); + + m_globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); + m_globalAutoTypeModifiers = static_cast(config()->get("GlobalAutoTypeModifiers").toInt()); + if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { + m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); + } + m_secUi->clearClipboardCheckBox->setChecked(config()->get("security/clearclipboard").toBool()); m_secUi->clearClipboardSpinBox->setValue(config()->get("security/clearclipboardtimeout").toInt()); @@ -67,6 +75,8 @@ void SettingsWidget::saveSettings() config()->set("ModifiedOnExpandedStateChanges", m_generalUi->modifiedExpandedChangedCheckBox->isChecked()); config()->set("AutoSaveAfterEveryChange", m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked()); config()->set("AutoSaveOnExit", m_generalUi->autoSaveOnExitCheckBox->isChecked()); + config()->set("GlobalAutoTypeKey", m_generalUi->autoTypeShortcutWidget->key()); + config()->set("GlobalAutoTypeModifiers", static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); config()->set("security/clearclipboard", m_secUi->clearClipboardCheckBox->isChecked()); config()->set("security/clearclipboardtimeout", m_secUi->clearClipboardSpinBox->value()); @@ -75,6 +85,11 @@ void SettingsWidget::saveSettings() void SettingsWidget::reject() { + // register the old key again as it might have changed + if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { + autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); + } + Q_EMIT editFinished(false); } diff --git a/src/gui/SettingsWidget.h b/src/gui/SettingsWidget.h index 61a2669d..cefbf6d4 100644 --- a/src/gui/SettingsWidget.h +++ b/src/gui/SettingsWidget.h @@ -47,6 +47,8 @@ private: QWidget* const m_generalWidget; const QScopedPointer m_secUi; const QScopedPointer m_generalUi; + Qt::Key m_globalAutoTypeKey; + Qt::KeyboardModifiers m_globalAutoTypeModifiers; }; #endif // KEEPASSX_SETTINGSWIDGET_H diff --git a/src/gui/SettingsWidgetGeneral.ui b/src/gui/SettingsWidgetGeneral.ui index 0c492a53..78e9dadb 100644 --- a/src/gui/SettingsWidgetGeneral.ui +++ b/src/gui/SettingsWidgetGeneral.ui @@ -6,8 +6,8 @@ 0 0 - 354 - 104 + 456 + 146 @@ -45,8 +45,25 @@ + + + + Global Auto-Type shortcut + + + + + + + + + ShortcutWidget + QLineEdit +
autotype/ShortcutWidget.h
+
+