From 4396cbb145b3ec4b31181234f91ba8d4489e2be1 Mon Sep 17 00:00:00 2001 From: Davide Giacometti Date: Sat, 22 Feb 2025 21:32:57 +0100 Subject: [PATCH] fix on-screen keyboard activation --- .../KeyboardListener.cpp | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp index 6969d7dd589b..5904dd258720 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp @@ -169,6 +169,14 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation if (std::find(letters.begin(), letters.end(), letterKey) != cend(letters) && m_isLanguageLetterCb(letterKey)) { + if (m_toolbarVisible && letterPressed == letterKey) + { + // On-screen keyboard continuously sends WM_KEYDOWN when a key is held down + // If Quick Accent is visible, prevent the letter key from being processed + // https://github.com/microsoft/PowerToys/issues/36853 + return true; + } + m_stopwatch.reset(); letterPressed = letterKey; } @@ -220,8 +228,8 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation Logger::debug(L"Next toolbar position - space"); m_nextCharCb(TriggerKey::Space, m_leftShiftPressed || m_rightShiftPressed); } - - return true; + + return true; } return false; @@ -282,14 +290,14 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation LRESULT KeyboardListener::LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { + if (nCode == HC_ACTION && s_instance != nullptr) { - if (nCode == HC_ACTION && s_instance != nullptr) + KBDLLHOOKSTRUCT* key = reinterpret_cast(lParam); + switch (wParam) { - KBDLLHOOKSTRUCT* key = reinterpret_cast(lParam); - switch (wParam) - { case WM_KEYDOWN: { + Logger::debug(L"Key down: {}", key->vkCode); if (s_instance->OnKeyDown(*key)) { return true; @@ -304,10 +312,9 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation } } break; - } } - - return CallNextHookEx(NULL, nCode, wParam, lParam); } + + return CallNextHookEx(NULL, nCode, wParam, lParam); } }