server: Apply modifier vkey transformations regardless of unicode flag.

This commit is contained in:
Alexandros Frantzis 2024-05-30 19:32:11 +03:00 committed by Alexandre Julliard
parent d0e3286d96
commit d14a827b8c
2 changed files with 22 additions and 26 deletions

View file

@ -1224,11 +1224,10 @@ static void test_SendInput_keyboard_messages( WORD vkey, WORD scan, WCHAR wch, W
struct send_input_keyboard_test unicode_vkey_ctrl[] =
{
{.scan = 0x3c0, .vkey = VK_CONTROL, .flags = KEYEVENTF_UNICODE,
.expect_state = {[VK_CONTROL] = 0x80, [VK_LCONTROL] = 0x80}, .todo_state = {[VK_LCONTROL] = TRUE},
.expect = {KEY_HOOK(WM_KEYDOWN, 0xc0, VK_LCONTROL, .todo_value = TRUE), KEY_MSG(WM_KEYDOWN, 0xc0, VK_CONTROL), {0}}},
{.scan = 0x3c0, .vkey = VK_CONTROL, .flags = KEYEVENTF_UNICODE, .expect_state = {[VK_CONTROL] = 0x80, [VK_LCONTROL] = 0x80},
.expect = {KEY_HOOK(WM_KEYDOWN, 0xc0, VK_LCONTROL), KEY_MSG(WM_KEYDOWN, 0xc0, VK_CONTROL), {0}}},
{.scan = 0x3c0, .vkey = VK_CONTROL, .flags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP,
.expect = {KEY_HOOK(WM_KEYUP, 0xc0, VK_LCONTROL, .todo_value = TRUE), KEY_MSG(WM_KEYUP, 0xc0, VK_CONTROL), {0}}},
.expect = {KEY_HOOK(WM_KEYUP, 0xc0, VK_LCONTROL), KEY_MSG(WM_KEYUP, 0xc0, VK_CONTROL), {0}}},
{0},
};

View file

@ -2103,29 +2103,26 @@ static int queue_keyboard_message( struct desktop *desktop, user_handle_t win, c
if (!(time = input->kbd.time)) time = get_tick_count();
if (!(input->kbd.flags & KEYEVENTF_UNICODE))
switch (vkey)
{
switch (vkey)
{
case VK_MENU:
case VK_LMENU:
case VK_RMENU:
vkey = (input->kbd.flags & KEYEVENTF_EXTENDEDKEY) ? VK_RMENU : VK_LMENU;
if ((input->kbd.vkey & 0xff) == VK_MENU) hook_vkey = vkey;
break;
case VK_CONTROL:
case VK_LCONTROL:
case VK_RCONTROL:
vkey = (input->kbd.flags & KEYEVENTF_EXTENDEDKEY) ? VK_RCONTROL : VK_LCONTROL;
if ((input->kbd.vkey & 0xff) == VK_CONTROL) hook_vkey = vkey;
break;
case VK_SHIFT:
case VK_LSHIFT:
case VK_RSHIFT:
vkey = (input->kbd.flags & KEYEVENTF_EXTENDEDKEY) ? VK_RSHIFT : VK_LSHIFT;
if ((input->kbd.vkey & 0xff) == VK_SHIFT) hook_vkey = vkey;
break;
}
case VK_MENU:
case VK_LMENU:
case VK_RMENU:
vkey = (input->kbd.flags & KEYEVENTF_EXTENDEDKEY) ? VK_RMENU : VK_LMENU;
if ((input->kbd.vkey & 0xff) == VK_MENU) hook_vkey = vkey;
break;
case VK_CONTROL:
case VK_LCONTROL:
case VK_RCONTROL:
vkey = (input->kbd.flags & KEYEVENTF_EXTENDEDKEY) ? VK_RCONTROL : VK_LCONTROL;
if ((input->kbd.vkey & 0xff) == VK_CONTROL) hook_vkey = vkey;
break;
case VK_SHIFT:
case VK_LSHIFT:
case VK_RSHIFT:
vkey = (input->kbd.flags & KEYEVENTF_EXTENDEDKEY) ? VK_RSHIFT : VK_LSHIFT;
if ((input->kbd.vkey & 0xff) == VK_SHIFT) hook_vkey = vkey;
break;
}
message_code = (input->kbd.flags & KEYEVENTF_KEYUP) ? WM_KEYUP : WM_KEYDOWN;