X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5bb302a7aac02fdf188883cef7955ae108468c80..7fbc727b20f39088ddd5e5cf4b6aed930da69119:/src/msw/uiaction.cpp?ds=sidebyside diff --git a/src/msw/uiaction.cpp b/src/msw/uiaction.cpp index 293cf51078..eb5bfd1e34 100644 --- a/src/msw/uiaction.cpp +++ b/src/msw/uiaction.cpp @@ -16,9 +16,10 @@ #if wxUSE_UIACTIONSIMULATOR #include "wx/uiaction.h" -#include "wx/window.h" //for wxCharCodeWXToMSW #include "wx/msw/wrapwin.h" +#include "wx/msw/private/keyboard.h" + namespace { @@ -41,11 +42,6 @@ DWORD EventTypeForMouseButton(int button, bool isDown) } } -void DoSimulateKbdEvent(DWORD vk, bool isDown) -{ - keybd_event(vk, 0, isDown ? 0 : KEYEVENTF_KEYUP, 0); -} - } // anonymous namespace bool wxUIActionSimulator::MouseDown(int button) @@ -76,30 +72,19 @@ bool wxUIActionSimulator::MouseUp(int button) return true; } -bool wxUIActionSimulator::DoKey(int keycode, int modifiers, bool isDown) +bool +wxUIActionSimulator::DoKey(int keycode, int WXUNUSED(modifiers), bool isDown) { - if (isDown) - { - if (modifiers & wxMOD_SHIFT) - DoSimulateKbdEvent(VK_SHIFT, true); - if (modifiers & wxMOD_ALT) - DoSimulateKbdEvent(VK_MENU, true); - if (modifiers & wxMOD_CMD) - DoSimulateKbdEvent(VK_CONTROL, true); - } + bool isExtended; + DWORD vkkeycode = wxMSWKeyboard::WXToVK(keycode, &isExtended); - DWORD vkkeycode = wxCharCodeWXToMSW(keycode); - keybd_event(vkkeycode, 0, isDown ? 0 : KEYEVENTF_KEYUP, 0); + DWORD flags = 0; + if ( isExtended ) + flags |= KEYEVENTF_EXTENDEDKEY; + if ( !isDown ) + flags |= KEYEVENTF_KEYUP; - if (!isDown) - { - if (modifiers & wxMOD_SHIFT) - DoSimulateKbdEvent(VK_SHIFT, false); - if (modifiers & wxMOD_ALT) - DoSimulateKbdEvent(VK_MENU, false); - if (modifiers & wxMOD_CMD) - DoSimulateKbdEvent(VK_CONTROL, false); - } + keybd_event(vkkeycode, 0, flags, 0); return true; }