From 8a7eb3695087c94f78b9c93676f6d36597f407c2 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Mon, 7 Mar 2022 23:05:24 -0500 Subject: [PATCH] Several fixes for Auto-Type * On Windows, offer explicit methods to use the virtual keyboard style of typing. This partially reverts 1150b69836a9e999ebefa38e7fa608d4f07ee6fd by going back to the standard unicode method by default. However, uses can either add {MODE=VIRTUAL} to their sequence or choose "Use Virtual Keyboard" / CTRL+4 from the selection dialog. * Took this opportunity to clean up the signature of AutoType::performAutoType and AutoType::performAutoTypeWithSequence by removing the "hideWindow" attribute. * Show keyboard shortcuts on the selection dialog context menu * Fix selection dialog help icon color when in dark theme --- .../autotype_selection_dialog_type_menu.png | Bin 36766 -> 62892 bytes docs/topics/AutoType.adoc | 1 + share/translations/keepassxc_en.ts | 21 +-- src/autotype/AutoType.cpp | 65 +++++---- src/autotype/AutoType.h | 16 +-- src/autotype/AutoTypeAction.cpp | 11 ++ src/autotype/AutoTypeAction.h | 16 +++ src/autotype/AutoTypeSelectDialog.cpp | 36 ++++- src/autotype/AutoTypeSelectDialog.h | 3 +- src/autotype/AutoTypeSelectDialog.ui | 33 ++--- src/autotype/windows/AutoTypeWindows.cpp | 123 +++++++++--------- src/autotype/windows/AutoTypeWindows.h | 5 +- src/gui/DatabaseWidget.cpp | 4 +- tests/TestAutoType.cpp | 2 +- 14 files changed, 207 insertions(+), 129 deletions(-) diff --git a/docs/images/autotype_selection_dialog_type_menu.png b/docs/images/autotype_selection_dialog_type_menu.png index f0e83ee80fd985e4e49976a797b78ad01be02489..08fb0f9ee2dad5bc3a8ef9dd97026b1bea2b3065 100644 GIT binary patch literal 62892 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 RP9Jo-nSp^J(Kq1>0|PTdfKQ0)|NsAg{`~p< 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 diff --git a/docs/topics/AutoType.adoc b/docs/topics/AutoType.adoc index 6d54e34e3..8b60830d9 100644 --- a/docs/topics/AutoType.adoc +++ b/docs/topics/AutoType.adoc @@ -60,6 +60,7 @@ image::autotype_entry_sequences.png[] |{DELAY X} |Pause typing for X milliseconds |{CLEARFIELD} |Clear the input field |{PICKCHARS} |Pick specific password characters from a dialog +|{MODE=VIRTUAL} |(Experimental) Use virtual key presses on Windows, useful for virtual machines |=== === Performing Global Auto-Type diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index 92d8de75d..155dfa2ff 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -705,14 +705,6 @@ Double click a row to perform Auto-Type or find an entry using the search: - - <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> -Ctrl+F - Toggle database search<br/> -Ctrl+1 - Type username<br/> -Ctrl+2 - Type password<br/> -Ctrl+3 - Type TOTP</p> - - Search all open databases @@ -753,6 +745,19 @@ Ctrl+3 - Type TOTP</p> Copy TOTP + + <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> +Ctrl+F - Toggle database search<br/> +Ctrl+1 - Type username<br/> +Ctrl+2 - Type password<br/> +Ctrl+3 - Type TOTP<br/> +Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> + + + + Use Virtual Keyboard + + BrowserAccessControlDialog diff --git a/src/autotype/AutoType.cpp b/src/autotype/AutoType.cpp index 603896004..850863e91 100644 --- a/src/autotype/AutoType.cpp +++ b/src/autotype/AutoType.cpp @@ -254,7 +254,10 @@ void AutoType::unregisterGlobalShortcut() /** * Core Autotype function that will execute actions */ -void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window) +void AutoType::executeAutoTypeActions(const Entry* entry, + const QString& sequence, + WId window, + AutoTypeExecutor::Mode mode) { QString error; auto actions = parseSequence(sequence, entry, error); @@ -274,7 +277,8 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c return; } - if (hideWindow) { + // Explicitly hide the main window if no target window is specified + if (window == 0) { #if defined(Q_OS_MACOS) // Check for accessibility permission if (!macUtils()->enableAccessibility()) { @@ -289,20 +293,22 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c macUtils()->raiseLastActiveWindow(); m_plugin->hideOwnWindow(); #else - getMainWindow()->minimizeOrHide(); + if (getMainWindow()) { + getMainWindow()->minimizeOrHide(); + } #endif - } - - // Restore window state in case app stole focus - restoreWindowState(); - QCoreApplication::processEvents(); - m_plugin->raiseWindow(m_windowForGlobal); - - // Used only for selected entry auto-type - if (!window) { + QCoreApplication::processEvents(); window = m_plugin->activeWindow(); + } else { + // Restore window state (macOS only) then raise the target window + restoreWindowState(); + QCoreApplication::processEvents(); + m_plugin->raiseWindow(window); } + // Restore executor mode + m_executor->mode = mode; + int delay = qMax(100, config()->get(Config::AutoTypeStartDelay).toInt()); Tools::wait(delay); @@ -346,7 +352,7 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c * Single Autotype entry-point function * Look up the Auto-Type sequence for the given entry then perfom Auto-Type in the active window */ -void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) +void AutoType::performAutoType(const Entry* entry) { if (!m_plugin) { return; @@ -354,7 +360,7 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) auto sequences = entry->autoTypeSequences(); if (!sequences.isEmpty()) { - executeAutoTypeActions(entry, hideWindow, sequences.first()); + executeAutoTypeActions(entry, sequences.first()); } } @@ -362,13 +368,13 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow) * Extra Autotype entry-point function * Perfom Auto-Type of the directly specified sequence in the active window */ -void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow) +void AutoType::performAutoTypeWithSequence(const Entry* entry, const QString& sequence) { if (!m_plugin) { return; } - executeAutoTypeActions(entry, hideWindow, sequence); + executeAutoTypeActions(entry, sequence); } void AutoType::startGlobalAutoType(const QString& search) @@ -467,12 +473,19 @@ void AutoType::performGlobalAutoType(const QList>& dbLi } connect(getMainWindow(), &MainWindow::databaseLocked, selectDialog, &AutoTypeSelectDialog::reject); - connect(selectDialog, &AutoTypeSelectDialog::matchActivated, this, [this](const AutoTypeMatch& match) { - m_lastMatch = match; - m_lastMatchRetypeTimer.start(config()->get(Config::GlobalAutoTypeRetypeTime).toInt() * 1000); - executeAutoTypeActions(match.first, nullptr, match.second, m_windowForGlobal); - resetAutoTypeState(); - }); + connect(selectDialog, + &AutoTypeSelectDialog::matchActivated, + this, + [this](const AutoTypeMatch& match, bool virtualMode) { + m_lastMatch = match; + m_lastMatchRetypeTimer.start(config()->get(Config::GlobalAutoTypeRetypeTime).toInt() * 1000); + executeAutoTypeActions(match.first, + match.second, + m_windowForGlobal, + virtualMode ? AutoTypeExecutor::Mode::VIRTUAL + : AutoTypeExecutor::Mode::NORMAL); + resetAutoTypeState(); + }); connect(selectDialog, &QDialog::rejected, this, [this] { restoreWindowState(); resetAutoTypeState(); @@ -488,7 +501,7 @@ void AutoType::performGlobalAutoType(const QList>& dbLi selectDialog->activateWindow(); } else if (!matchList.isEmpty()) { // Only one match and not asking, do it! - executeAutoTypeActions(matchList.first().first, nullptr, matchList.first().second, m_windowForGlobal); + executeAutoTypeActions(matchList.first().first, matchList.first().second, m_windowForGlobal); resetAutoTypeState(); } else { // We should never get here @@ -717,6 +730,12 @@ AutoType::parseSequence(const QString& entrySequence, const Entry* entry, QStrin error = tr("Invalid conversion syntax: %1").arg(fullPlaceholder); return {}; } + } else if (placeholder.startsWith("mode=")) { + auto mode = AutoTypeExecutor::Mode::NORMAL; + if (placeholder.endsWith("virtual")) { + mode = AutoTypeExecutor::Mode::VIRTUAL; + } + actions << QSharedPointer::create(mode); } else if (placeholder == "beep" || placeholder.startsWith("vkey") || placeholder.startsWith("appactivate") || placeholder.startsWith("c:")) { // Ignore these commands diff --git a/src/autotype/AutoType.h b/src/autotype/AutoType.h index 1e09adaf3..5fc07adab 100644 --- a/src/autotype/AutoType.h +++ b/src/autotype/AutoType.h @@ -19,15 +19,15 @@ #ifndef KEEPASSX_AUTOTYPE_H #define KEEPASSX_AUTOTYPE_H +#include "AutoTypeAction.h" + #include -#include #include #include +#include "AutoTypeAction.h" #include "AutoTypeMatch.h" -class AutoTypeAction; -class AutoTypeExecutor; class AutoTypePlatformInterface; class Database; class Entry; @@ -41,8 +41,8 @@ public: QStringList windowTitles(); bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers, QString* error = nullptr); void unregisterGlobalShortcut(); - void performAutoType(const Entry* entry, QWidget* hideWindow = nullptr); - void performAutoTypeWithSequence(const Entry* entry, const QString& sequence, QWidget* hideWindow = nullptr); + void performAutoType(const Entry* entry); + void performAutoTypeWithSequence(const Entry* entry, const QString& sequence); static bool verifyAutoTypeSyntax(const QString& sequence, const Entry* entry, QString& error); @@ -80,9 +80,9 @@ private: ~AutoType() override; void loadPlugin(const QString& pluginPath); void executeAutoTypeActions(const Entry* entry, - QWidget* hideWindow = nullptr, - const QString& customSequence = QString(), - WId window = 0); + const QString& sequence = QString(), + WId window = 0, + AutoTypeExecutor::Mode mode = AutoTypeExecutor::Mode::NORMAL); void restoreWindowState(); void resetAutoTypeState(); diff --git a/src/autotype/AutoTypeAction.cpp b/src/autotype/AutoTypeAction.cpp index d43ff7002..237d7743f 100644 --- a/src/autotype/AutoTypeAction.cpp +++ b/src/autotype/AutoTypeAction.cpp @@ -65,3 +65,14 @@ AutoTypeAction::Result AutoTypeBegin::exec(AutoTypeExecutor* executor) const { return executor->execBegin(this); } + +AutoTypeMode::AutoTypeMode(AutoTypeExecutor::Mode mode) + : mode(mode) +{ +} + +AutoTypeAction::Result AutoTypeMode::exec(AutoTypeExecutor* executor) const +{ + executor->mode = mode; + return AutoTypeAction::Result::Ok(); +} diff --git a/src/autotype/AutoTypeAction.h b/src/autotype/AutoTypeAction.h index 48dd29cc9..082d0aea7 100644 --- a/src/autotype/AutoTypeAction.h +++ b/src/autotype/AutoTypeAction.h @@ -121,13 +121,29 @@ public: class KEEPASSXC_EXPORT AutoTypeExecutor { public: + enum class Mode + { + NORMAL, + VIRTUAL + }; + virtual ~AutoTypeExecutor() = default; virtual AutoTypeAction::Result execBegin(const AutoTypeBegin* action) = 0; virtual AutoTypeAction::Result execType(const AutoTypeKey* action) = 0; virtual AutoTypeAction::Result execClearField(const AutoTypeClearField* action) = 0; int execDelayMs = 25; + Mode mode = Mode::NORMAL; QString error; }; +class KEEPASSXC_EXPORT AutoTypeMode : public AutoTypeAction +{ +public: + AutoTypeMode(AutoTypeExecutor::Mode mode = AutoTypeExecutor::Mode::NORMAL); + Result exec(AutoTypeExecutor* executor) const override; + + const AutoTypeExecutor::Mode mode; +}; + #endif // KEEPASSX_AUTOTYPEACTION_H diff --git a/src/autotype/AutoTypeSelectDialog.cpp b/src/autotype/AutoTypeSelectDialog.cpp index d58e33151..0c8eefdc4 100644 --- a/src/autotype/AutoTypeSelectDialog.cpp +++ b/src/autotype/AutoTypeSelectDialog.cpp @@ -58,6 +58,8 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) } }); + m_ui->helpButton->setIcon(icons()->icon("system-help")); + m_ui->search->installEventFilter(this); m_searchTimer.setInterval(300); @@ -118,7 +120,7 @@ void AutoTypeSelectDialog::submitAutoTypeMatch(AutoTypeMatch match) if (match.first) { m_accepted = true; accept(); - emit matchActivated(std::move(match)); + emit matchActivated(std::move(match), m_virtualMode); } } @@ -274,34 +276,54 @@ void AutoTypeSelectDialog::buildActionMenu() m_actionMenu->addAction(typeUsernameAction); m_actionMenu->addAction(typePasswordAction); m_actionMenu->addAction(typeTotpAction); +#ifdef Q_OS_WIN + auto typeVirtualAction = new QAction(icons()->icon("auto-type"), tr("Use Virtual Keyboard")); + m_actionMenu->addAction(typeVirtualAction); +#endif m_actionMenu->addAction(copyUsernameAction); m_actionMenu->addAction(copyPasswordAction); m_actionMenu->addAction(copyTotpAction); - auto shortcut = new QShortcut(Qt::CTRL + Qt::Key_1, this); - connect(shortcut, &QShortcut::activated, typeUsernameAction, &QAction::trigger); + typeUsernameAction->setShortcut(Qt::CTRL + Qt::Key_1); connect(typeUsernameAction, &QAction::triggered, this, [&] { auto match = m_ui->view->currentMatch(); match.second = "{USERNAME}"; submitAutoTypeMatch(match); }); - shortcut = new QShortcut(Qt::CTRL + Qt::Key_2, this); - connect(shortcut, &QShortcut::activated, typePasswordAction, &QAction::trigger); + typePasswordAction->setShortcut(Qt::CTRL + Qt::Key_2); connect(typePasswordAction, &QAction::triggered, this, [&] { auto match = m_ui->view->currentMatch(); match.second = "{PASSWORD}"; submitAutoTypeMatch(match); }); - shortcut = new QShortcut(Qt::CTRL + Qt::Key_3, this); - connect(shortcut, &QShortcut::activated, typeTotpAction, &QAction::trigger); + typeTotpAction->setShortcut(Qt::CTRL + Qt::Key_3); connect(typeTotpAction, &QAction::triggered, this, [&] { auto match = m_ui->view->currentMatch(); match.second = "{TOTP}"; submitAutoTypeMatch(match); }); +#ifdef Q_OS_WIN + typeVirtualAction->setShortcut(Qt::CTRL + Qt::Key_4); + connect(typeVirtualAction, &QAction::triggered, this, [&] { + m_virtualMode = true; + activateCurrentMatch(); + }); +#endif + +#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0) + // Qt 5.10 introduced a new "feature" to hide shortcuts in context menus + // Unfortunately, Qt::AA_DontShowShortcutsInContextMenus is broken, have to manually enable them + typeUsernameAction->setShortcutVisibleInContextMenu(true); + typePasswordAction->setShortcutVisibleInContextMenu(true); + typeTotpAction->setShortcutVisibleInContextMenu(true); +#ifdef Q_OS_WIN + typeVirtualAction->setShortcutVisibleInContextMenu(true); +#endif +#endif + connect(copyUsernameAction, &QAction::triggered, this, [&] { auto entry = m_ui->view->currentMatch().first; if (entry) { diff --git a/src/autotype/AutoTypeSelectDialog.h b/src/autotype/AutoTypeSelectDialog.h index fec596b34..9c0580410 100644 --- a/src/autotype/AutoTypeSelectDialog.h +++ b/src/autotype/AutoTypeSelectDialog.h @@ -45,7 +45,7 @@ public: void setSearchString(const QString& search); signals: - void matchActivated(AutoTypeMatch match); + void matchActivated(AutoTypeMatch match, bool virtualMode = false); protected: bool eventFilter(QObject* obj, QEvent* event) override; @@ -69,6 +69,7 @@ private: QTimer m_searchTimer; QPointer m_actionMenu; + bool m_virtualMode = false; bool m_accepted = false; }; diff --git a/src/autotype/AutoTypeSelectDialog.ui b/src/autotype/AutoTypeSelectDialog.ui index cac656d60..0c5e3c8c2 100644 --- a/src/autotype/AutoTypeSelectDialog.ui +++ b/src/autotype/AutoTypeSelectDialog.ui @@ -43,34 +43,29 @@ - - - - 0 - 0 - + + + PointingHandCursor - - - 14 - 14 - + + Qt::NoFocus <p>You can use advanced search queries to find any entry in your open databases. The following shortcuts are useful:<br/> Ctrl+F - Toggle database search<br/> Ctrl+1 - Type username<br/> Ctrl+2 - Type password<br/> -Ctrl+3 - Type TOTP</p> +Ctrl+3 - Type TOTP<br/> +Ctrl+4 - Use Virtual Keyboard (Windows Only)</p> + + + QToolButton { + border: none; + background: none; +} - - - - :/icons/application/scalable/actions/system-help.svg - - - true + ? diff --git a/src/autotype/windows/AutoTypeWindows.cpp b/src/autotype/windows/AutoTypeWindows.cpp index 894980f83..9d0467b90 100644 --- a/src/autotype/windows/AutoTypeWindows.cpp +++ b/src/autotype/windows/AutoTypeWindows.cpp @@ -81,67 +81,71 @@ bool AutoTypePlatformWin::raiseWindow(WId window) // // Send unicode character to foreground window // -void AutoTypePlatformWin::sendChar(const QChar& ch, bool isKeyDown) +void AutoTypePlatformWin::sendChar(const QChar& ch) { - auto vkey = VkKeyScanExW(ch.unicode(), GetKeyboardLayout(0)); - if (vkey == -1) { - // VKey not found, send as Unicode character - DWORD flags = KEYEVENTF_UNICODE; - if (!isKeyDown) { - flags |= KEYEVENTF_KEYUP; - } + DWORD nativeFlags = KEYEVENTF_UNICODE; - INPUT in; - in.type = INPUT_KEYBOARD; - in.ki.wVk = 0; - in.ki.wScan = ch.unicode(); - in.ki.dwFlags = flags; - in.ki.time = 0; - in.ki.dwExtraInfo = ::GetMessageExtraInfo(); - ::SendInput(1, &in, sizeof(INPUT)); + INPUT in[2]; + in[0].type = INPUT_KEYBOARD; + in[0].ki.wVk = 0; + in[0].ki.wScan = ch.unicode(); + in[0].ki.dwFlags = KEYEVENTF_UNICODE; + in[0].ki.time = 0; + in[0].ki.dwExtraInfo = ::GetMessageExtraInfo(); + + in[1] = in[0]; + in[1].ki.dwFlags |= KEYEVENTF_KEYUP; + + ::SendInput(2, &in[0], sizeof(INPUT)); +} + +void AutoTypePlatformWin::sendCharVirtual(const QChar& ch) +{ + auto vKey = VkKeyScanExW(ch.unicode(), GetKeyboardLayout(0)); + if (vKey == -1) { + // VKey not found, send as Unicode character + sendChar(ch); return; } - if (HIBYTE(vkey) & 0x6) { - sendKey(Qt::Key_AltGr, true); + if (HIBYTE(vKey) & 0x6) { + setKeyState(Qt::Key_AltGr, true); } else { - if (HIBYTE(vkey) & 0x1) { - sendKey(Qt::Key_Shift, true); + if (HIBYTE(vKey) & 0x1) { + setKeyState(Qt::Key_Shift, true); } - if (HIBYTE(vkey) & 0x2) { - sendKey(Qt::Key_Control, true); + if (HIBYTE(vKey) & 0x2) { + setKeyState(Qt::Key_Control, true); } - if (HIBYTE(vkey) & 0x4) { - sendKey(Qt::Key_Alt, true); + if (HIBYTE(vKey) & 0x4) { + setKeyState(Qt::Key_Alt, true); } } - DWORD flags = KEYEVENTF_SCANCODE; - if (!isKeyDown) { - flags |= KEYEVENTF_KEYUP; - } + INPUT in[2]; + in[0].type = INPUT_KEYBOARD; + in[0].ki.wVk = 0; + in[0].ki.wScan = MapVirtualKey(LOBYTE(vKey), MAPVK_VK_TO_VSC); + in[0].ki.dwFlags = KEYEVENTF_SCANCODE; + in[0].ki.time = 0; + in[0].ki.dwExtraInfo = ::GetMessageExtraInfo(); - INPUT in; - in.type = INPUT_KEYBOARD; - in.ki.wVk = 0; - in.ki.wScan = MapVirtualKey(LOBYTE(vkey), MAPVK_VK_TO_VSC); - in.ki.dwFlags = flags; - in.ki.time = 0; - in.ki.dwExtraInfo = ::GetMessageExtraInfo(); + in[1] = in[0]; + in[1].ki.dwFlags |= KEYEVENTF_KEYUP; - ::SendInput(1, &in, sizeof(INPUT)); + ::SendInput(2, &in[0], sizeof(INPUT)); - if (HIBYTE(vkey) & 0x6) { - sendKey(Qt::Key_AltGr, false); + if (HIBYTE(vKey) & 0x6) { + setKeyState(Qt::Key_AltGr, false); } else { - if (HIBYTE(vkey) & 0x1) { - sendKey(Qt::Key_Shift, false); + if (HIBYTE(vKey) & 0x1) { + setKeyState(Qt::Key_Shift, false); } - if (HIBYTE(vkey) & 0x2) { - sendKey(Qt::Key_Control, false); + if (HIBYTE(vKey) & 0x2) { + setKeyState(Qt::Key_Control, false); } - if (HIBYTE(vkey) & 0x4) { - sendKey(Qt::Key_Alt, false); + if (HIBYTE(vKey) & 0x4) { + setKeyState(Qt::Key_Alt, false); } } } @@ -149,14 +153,14 @@ void AutoTypePlatformWin::sendChar(const QChar& ch, bool isKeyDown) // // Send virtual key code to foreground window // -void AutoTypePlatformWin::sendKey(Qt::Key key, bool isKeyDown) +void AutoTypePlatformWin::setKeyState(Qt::Key key, bool down) { WORD nativeKeyCode = winUtils()->qtToNativeKeyCode(key); DWORD nativeFlags = KEYEVENTF_SCANCODE; if (isExtendedKey(nativeKeyCode)) { nativeFlags |= KEYEVENTF_EXTENDEDKEY; } - if (!isKeyDown) { + if (!down) { nativeFlags |= KEYEVENTF_KEYUP; } @@ -279,37 +283,40 @@ AutoTypeAction::Result AutoTypeExecutorWin::execBegin(const AutoTypeBegin* actio AutoTypeAction::Result AutoTypeExecutorWin::execType(const AutoTypeKey* action) { if (action->modifiers & Qt::ShiftModifier) { - m_platform->sendKey(Qt::Key_Shift, true); + m_platform->setKeyState(Qt::Key_Shift, true); } if (action->modifiers & Qt::ControlModifier) { - m_platform->sendKey(Qt::Key_Control, true); + m_platform->setKeyState(Qt::Key_Control, true); } if (action->modifiers & Qt::AltModifier) { - m_platform->sendKey(Qt::Key_Alt, true); + m_platform->setKeyState(Qt::Key_Alt, true); } if (action->modifiers & Qt::MetaModifier) { - m_platform->sendKey(Qt::Key_Meta, true); + m_platform->setKeyState(Qt::Key_Meta, true); } if (action->key != Qt::Key_unknown) { - m_platform->sendKey(action->key, true); - m_platform->sendKey(action->key, false); + m_platform->setKeyState(action->key, true); + m_platform->setKeyState(action->key, false); } else { - m_platform->sendChar(action->character, true); - m_platform->sendChar(action->character, false); + if (mode == Mode::VIRTUAL) { + m_platform->sendCharVirtual(action->character); + } else { + m_platform->sendChar(action->character); + } } if (action->modifiers & Qt::ShiftModifier) { - m_platform->sendKey(Qt::Key_Shift, false); + m_platform->setKeyState(Qt::Key_Shift, false); } if (action->modifiers & Qt::ControlModifier) { - m_platform->sendKey(Qt::Key_Control, false); + m_platform->setKeyState(Qt::Key_Control, false); } if (action->modifiers & Qt::AltModifier) { - m_platform->sendKey(Qt::Key_Alt, false); + m_platform->setKeyState(Qt::Key_Alt, false); } if (action->modifiers & Qt::MetaModifier) { - m_platform->sendKey(Qt::Key_Meta, false); + m_platform->setKeyState(Qt::Key_Meta, false); } Tools::sleep(execDelayMs); diff --git a/src/autotype/windows/AutoTypeWindows.h b/src/autotype/windows/AutoTypeWindows.h index 7b3d577d0..29e98ab35 100644 --- a/src/autotype/windows/AutoTypeWindows.h +++ b/src/autotype/windows/AutoTypeWindows.h @@ -43,8 +43,9 @@ public: bool raiseWindow(WId window) override; AutoTypeExecutor* createExecutor() override; - void sendChar(const QChar& ch, bool isKeyDown); - void sendKey(Qt::Key key, bool isKeyDown); + void sendCharVirtual(const QChar& ch); + void sendChar(const QChar& ch); + void setKeyState(Qt::Key key, bool down); private: static bool isExtendedKey(DWORD nativeKeyCode); diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 118713872..864b78c6e 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -782,9 +782,9 @@ void DatabaseWidget::performAutoType(const QString& sequence) } if (sequence.isEmpty()) { - autoType()->performAutoType(currentEntry, window()); + autoType()->performAutoType(currentEntry); } else { - autoType()->performAutoTypeWithSequence(currentEntry, sequence, window()); + autoType()->performAutoTypeWithSequence(currentEntry, sequence); } } } diff --git a/tests/TestAutoType.cpp b/tests/TestAutoType.cpp index 32b4b1e49..235ba5a86 100644 --- a/tests/TestAutoType.cpp +++ b/tests/TestAutoType.cpp @@ -140,7 +140,7 @@ void TestAutoType::testInternal() void TestAutoType::testSingleAutoType() { - m_autoType->performAutoType(m_entry1, nullptr); + m_autoType->performAutoType(m_entry1); QCOMPARE(m_test->actionCount(), 14); QCOMPARE(m_test->actionChars(),