mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 19:20:35 +00:00
(WIN32) Fix keyboard event characters (#14844)
This commit is contained in:
parent
2ae8a34cfb
commit
639d367773
@ -920,8 +920,8 @@ static LRESULT CALLBACK wnd_proc_common(
|
||||
/* Seems to be hard to synchronize
|
||||
* WM_CHAR and WM_KEYDOWN properly.
|
||||
*/
|
||||
input_keyboard_event(true, RETROK_UNKNOWN, wparam, mod,
|
||||
RETRO_DEVICE_KEYBOARD);
|
||||
input_keyboard_event(true, RETROK_UNKNOWN,
|
||||
wparam, mod, RETRO_DEVICE_KEYBOARD);
|
||||
}
|
||||
return TRUE;
|
||||
case WM_CLOSE:
|
||||
@ -1002,15 +1002,15 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
mod |= RETROKMOD_META;
|
||||
|
||||
input_keyboard_event(keydown, keycode,
|
||||
0, mod, RETRO_DEVICE_KEYBOARD);
|
||||
wparam, mod, RETRO_DEVICE_KEYBOARD);
|
||||
|
||||
if (message != WM_SYSKEYDOWN)
|
||||
return 0;
|
||||
|
||||
if (
|
||||
wparam == VK_F10 ||
|
||||
wparam == VK_MENU ||
|
||||
wparam == VK_RSHIFT
|
||||
wparam == VK_F10
|
||||
|| wparam == VK_MENU
|
||||
|| wparam == VK_RSHIFT
|
||||
)
|
||||
return 0;
|
||||
}
|
||||
@ -1047,11 +1047,11 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
break;
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
case WM_SETFOCUS:
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
win32_clip_window(true);
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
win32_clip_window(false);
|
||||
break;
|
||||
#endif
|
||||
@ -1086,8 +1086,10 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||
if (message != WM_SYSKEYDOWN)
|
||||
return 0;
|
||||
|
||||
/* keyboard_event in winraw_callback */
|
||||
|
||||
if (
|
||||
wparam == VK_F10
|
||||
wparam == VK_F10
|
||||
|| wparam == VK_MENU
|
||||
|| wparam == VK_RSHIFT
|
||||
)
|
||||
@ -1124,7 +1126,7 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||
break;
|
||||
case WM_SETFOCUS:
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
win32_clip_window(true);
|
||||
#endif
|
||||
#if !defined(_XBOX)
|
||||
@ -1134,7 +1136,7 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
if (input_state_get_ptr()->flags & INP_FLAG_GRAB_MOUSE_STATE)
|
||||
win32_clip_window(false);
|
||||
#endif
|
||||
#if !defined(_XBOX)
|
||||
@ -1177,17 +1179,17 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
|
||||
switch (message)
|
||||
{
|
||||
case WM_IME_ENDCOMPOSITION:
|
||||
input_keyboard_event(true, 1, 0x80000000, 0, RETRO_DEVICE_KEYBOARD);
|
||||
input_keyboard_event(true, 1, 0x80000000, 0, RETRO_DEVICE_KEYBOARD);
|
||||
break;
|
||||
case WM_IME_COMPOSITION:
|
||||
{
|
||||
{
|
||||
HIMC hIMC = ImmGetContext(hwnd);
|
||||
unsigned gcs = lparam & (GCS_COMPSTR|GCS_RESULTSTR);
|
||||
unsigned gcs = lparam & (GCS_COMPSTR|GCS_RESULTSTR);
|
||||
if (gcs)
|
||||
{
|
||||
int i;
|
||||
wchar_t wstr[4]={0,};
|
||||
int len1 = ImmGetCompositionStringW(hIMC, gcs, wstr, 4);
|
||||
int len1 = ImmGetCompositionStringW(hIMC, gcs, wstr, 4);
|
||||
wstr[2] = wstr[1];
|
||||
wstr[1] = 0;
|
||||
if ((len1 <= 0) || (len1 > 4))
|
||||
@ -1202,8 +1204,8 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
|
||||
if (len2 >= 1 && len2 <= 3)
|
||||
{
|
||||
if (len2 >= 2)
|
||||
utf8[3] = (gcs) | (gcs >> 4);
|
||||
input_keyboard_event(true, 1, *((int*)utf8), 0, RETRO_DEVICE_KEYBOARD);
|
||||
utf8[3] = (gcs) | (gcs >> 4);
|
||||
input_keyboard_event(true, 1, *((int*)utf8), 0, RETRO_DEVICE_KEYBOARD);
|
||||
}
|
||||
free(utf8);
|
||||
}
|
||||
@ -1251,7 +1253,7 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
|
||||
mod |= RETROKMOD_META;
|
||||
|
||||
input_keyboard_event(keydown, keycode,
|
||||
0, mod, RETRO_DEVICE_KEYBOARD);
|
||||
wparam, mod, RETRO_DEVICE_KEYBOARD);
|
||||
|
||||
if (message != WM_SYSKEYDOWN)
|
||||
return 0;
|
||||
|
@ -503,7 +503,7 @@ static LRESULT CALLBACK winraw_callback(
|
||||
HWND wnd, UINT msg, WPARAM wpar, LPARAM lpar)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned mcode, flags, kdown;
|
||||
unsigned mcode, flags, down, mod;
|
||||
static uint8_t data[1024];
|
||||
RAWINPUT *ri = (RAWINPUT*)data;
|
||||
UINT size = sizeof(data);
|
||||
@ -527,7 +527,8 @@ static LRESULT CALLBACK winraw_callback(
|
||||
case RIM_TYPEKEYBOARD:
|
||||
mcode = ri->data.keyboard.MakeCode;
|
||||
flags = ri->data.keyboard.Flags;
|
||||
kdown = (flags & RI_KEY_BREAK) ? 0 : 1;
|
||||
down = (flags & RI_KEY_BREAK) ? 0 : 1;
|
||||
mod = 0;
|
||||
|
||||
/* Extended scancodes */
|
||||
if (flags & RI_KEY_E0)
|
||||
@ -558,10 +559,23 @@ static LRESULT CALLBACK winraw_callback(
|
||||
return 0;
|
||||
}
|
||||
|
||||
wr->keyboard.keys[mcode] = kdown;
|
||||
input_keyboard_event(kdown,
|
||||
if (GetKeyState(VK_SHIFT) & 0x80)
|
||||
mod |= RETROKMOD_SHIFT;
|
||||
if (GetKeyState(VK_CONTROL) & 0x80)
|
||||
mod |= RETROKMOD_CTRL;
|
||||
if (GetKeyState(VK_MENU) & 0x80)
|
||||
mod |= RETROKMOD_ALT;
|
||||
if (GetKeyState(VK_CAPITAL) & 0x81)
|
||||
mod |= RETROKMOD_CAPSLOCK;
|
||||
if (GetKeyState(VK_SCROLL) & 0x81)
|
||||
mod |= RETROKMOD_SCROLLOCK;
|
||||
if ((GetKeyState(VK_LWIN) | GetKeyState(VK_RWIN)) & 0x80)
|
||||
mod |= RETROKMOD_META;
|
||||
|
||||
wr->keyboard.keys[mcode] = down;
|
||||
input_keyboard_event(down,
|
||||
input_keymaps_translate_keysym_to_rk(mcode),
|
||||
0, 0, RETRO_DEVICE_KEYBOARD);
|
||||
ri->data.keyboard.VKey, mod, RETRO_DEVICE_KEYBOARD);
|
||||
break;
|
||||
case RIM_TYPEMOUSE:
|
||||
for (i = 0; i < wr->mouse_cnt; ++i)
|
||||
|
Loading…
x
Reference in New Issue
Block a user