From 04e072ca401346b2fa33adbc4d9beea594413653 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Mon, 12 Jan 2015 19:54:58 +0000 Subject: [PATCH] Windows: Fix execution of keyboard menu shortcuts (issue #1387). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1967 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- libcef/browser/browser_host_impl_win.cc | 31 +++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/libcef/browser/browser_host_impl_win.cc b/libcef/browser/browser_host_impl_win.cc index 3e30f77da..b8e694553 100644 --- a/libcef/browser/browser_host_impl_win.cc +++ b/libcef/browser/browser_host_impl_win.cc @@ -747,6 +747,37 @@ void CefBrowserHostImpl::PlatformHandleKeyboardEvent( if (event.os_event) { const MSG& msg = event.os_event->native_event(); DefWindowProc(msg.hwnd, msg.message, msg.wParam, msg.lParam); + } else { + MSG msg = {}; + + msg.hwnd = PlatformGetWindowHandle(); + if (!msg.hwnd) + return; + + switch (event.type) { + case blink::WebInputEvent::RawKeyDown: + msg.message = event.isSystemKey ? WM_SYSKEYDOWN : WM_KEYDOWN; + break; + case blink::WebInputEvent::KeyUp: + msg.message = event.isSystemKey ? WM_SYSKEYUP : WM_KEYUP; + break; + case blink::WebInputEvent::Char: + msg.message = event.isSystemKey ? WM_SYSCHAR: WM_CHAR; + break; + default: + NOTREACHED(); + return; + } + + msg.wParam = event.windowsKeyCode; + + UINT scan_code = ::MapVirtualKeyW(event.windowsKeyCode, MAPVK_VK_TO_VSC); + msg.lParam = (scan_code << 16) | // key scan code + 1; // key repeat count + if (event.modifiers & content::NativeWebKeyboardEvent::AltKey) + msg.lParam |= (1 << 29); + + DefWindowProc(msg.hwnd, msg.message, msg.wParam, msg.lParam); } }