diff --git a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs index 01d87d034c..ee89f62158 100644 --- a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs +++ b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs @@ -203,6 +203,18 @@ public class PowerAccent : IDisposable break; } + case InputType.Right: + { + SendKeys.SendWait("{RIGHT}"); + break; + } + + case InputType.Left: + { + SendKeys.SendWait("{LEFT}"); + break; + } + case InputType.Char: { if (_selectedIndex != -1) diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp index 11ba7afc93..68aa84383f 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp @@ -12,7 +12,7 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation { KeyboardListener::KeyboardListener() : - m_toolbarVisible(false), m_triggeredWithSpace(false), m_leftShiftPressed(false), m_rightShiftPressed(false) + m_toolbarVisible(false), m_triggeredWithSpace(false), m_leftShiftPressed(false), m_rightShiftPressed(false), m_triggeredWithLeftArrow(false), m_triggeredWithRightArrow(false) { s_instance = this; LoggerHelpers::init_logger(L"PowerAccent", L"PowerAccentKeyboardService", "PowerAccent"); @@ -174,8 +174,8 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation (triggerPressed == VK_SPACE && m_settings.activationKey == PowerAccentActivationKey::LeftRightArrow) || ((triggerPressed == VK_LEFT || triggerPressed == VK_RIGHT) && m_settings.activationKey == PowerAccentActivationKey::Space)) { - triggerPressed = 0; Logger::debug(L"Reset trigger key"); + return false; } } } @@ -186,6 +186,8 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation // Keep track if it was triggered with space so that it can be typed on false starts. m_triggeredWithSpace = triggerPressed == VK_SPACE; + m_triggeredWithLeftArrow = triggerPressed == VK_LEFT; + m_triggeredWithRightArrow = triggerPressed == VK_RIGHT; m_toolbarVisible = true; m_showToolbarCb(letterPressed); } @@ -241,6 +243,14 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation { m_hideToolbarCb(InputType::Space); } + else if (m_triggeredWithLeftArrow) + { + m_hideToolbarCb(InputType::Left); + } + else if (m_triggeredWithRightArrow) + { + m_hideToolbarCb(InputType::Right); + } else { m_hideToolbarCb(InputType::None); diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h index a7f68835d6..65d2dca34a 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h @@ -55,6 +55,8 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation std::function m_nextCharCb; std::function m_isLanguageLetterCb; bool m_triggeredWithSpace; + bool m_triggeredWithLeftArrow; + bool m_triggeredWithRightArrow; spdlog::stopwatch m_stopwatch; bool m_leftShiftPressed; bool m_rightShiftPressed; diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl index 7e47362723..708e1c51a7 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl @@ -60,6 +60,8 @@ namespace PowerToys { None, Space, + Left, + Right, Char };