summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--video/out/w32_common.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/video/out/w32_common.c b/video/out/w32_common.c
index 600aa26716..f6a220b9bf 100644
--- a/video/out/w32_common.c
+++ b/video/out/w32_common.c
@@ -459,23 +459,32 @@ static int decode_key(struct vo_w32_state *w32, UINT vkey, UINT scancode)
return c;
}
-static void handle_key_down(struct vo_w32_state *w32, UINT vkey, UINT scancode)
+static bool is_wm_key(UINT vkey)
{
+ return vkey == VK_F10 || (vkey == ' ' && key_state(VK_LMENU));
+}
+
+static bool handle_key_down(struct vo_w32_state *w32, UINT vkey, UINT scancode)
+{
+ if (is_wm_key(vkey))
+ return 0;
+
// Ignore key repeat
if (scancode & KF_REPEAT)
- return;
+ return 1;
int mpkey = mp_w32_vkey_to_mpkey(vkey, scancode & KF_EXTENDED);
if (!mpkey) {
mpkey = decode_key(w32, vkey, scancode & (0xff | KF_EXTENDED));
if (!mpkey)
- return;
+ return 1;
}
mp_input_put_key(w32->input_ctx, mpkey | mod_state(w32) | MP_KEY_STATE_DOWN);
+ return 1;
}
-static void handle_key_up(struct vo_w32_state *w32, UINT vkey, UINT scancode)
+static bool handle_key_up(struct vo_w32_state *w32, UINT vkey, UINT scancode)
{
switch (vkey) {
case VK_MENU:
@@ -487,6 +496,7 @@ static void handle_key_up(struct vo_w32_state *w32, UINT vkey, UINT scancode)
// get "stuck." This matches the behaviour of other VOs.
mp_input_put_key(w32->input_ctx, MP_INPUT_RELEASE_ALL);
}
+ return !is_wm_key(vkey);
}
static bool handle_char(struct vo_w32_state *w32, wchar_t wc)
@@ -596,14 +606,12 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
break;
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
- handle_key_down(w32, wParam, HIWORD(lParam));
- if (wParam == VK_F10)
+ if (!handle_key_down(w32, wParam, HIWORD(lParam)))
return 0;
break;
case WM_SYSKEYUP:
case WM_KEYUP:
- handle_key_up(w32, wParam, HIWORD(lParam));
- if (wParam == VK_F10)
+ if (!handle_key_up(w32, wParam, HIWORD(lParam)))
return 0;
break;
case WM_CHAR: