Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1207)

Unified Diff: win8/metro_driver/chrome_app_view_ash.cc

Issue 12558008: Ensure that menus put in Chrome ASH on Windows 8 are operatable using the keyboard. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « win8/metro_driver/chrome_app_view_ash.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: win8/metro_driver/chrome_app_view_ash.cc
===================================================================
--- win8/metro_driver/chrome_app_view_ash.cc (revision 186512)
+++ win8/metro_driver/chrome_app_view_ash.cc (working copy)
@@ -37,6 +37,10 @@
winui::Core::KeyEventArgs*> KeyEventHandler;
typedef winfoundtn::ITypedEventHandler<
+ winui::Core::CoreDispatcher*,
+ winui::Core::AcceleratorKeyEventArgs*> AcceleratorKeyEventHandler;
+
+typedef winfoundtn::ITypedEventHandler<
winui::Core::CoreWindow*,
winui::Core::CharacterReceivedEventArgs*> CharEventHandler;
@@ -311,6 +315,21 @@
&keyup_token_);
CheckHR(hr);
+ mswr::ComPtr<winui::Core::ICoreDispatcher> dispatcher;
+ hr = window_->get_Dispatcher(&dispatcher);
+ CheckHR(hr, "Get Dispatcher failed.");
+
+ mswr::ComPtr<winui::Core::ICoreAcceleratorKeys> accelerator_keys;
+ hr = dispatcher.CopyTo(__uuidof(winui::Core::ICoreAcceleratorKeys),
+ reinterpret_cast<void**>(
+ accelerator_keys.GetAddressOf()));
+ CheckHR(hr, "QI for ICoreAcceleratorKeys failed.");
+ hr = accelerator_keys->add_AcceleratorKeyActivated(
+ mswr::Callback<AcceleratorKeyEventHandler>(
+ this, &ChromeAppViewAsh::OnAcceleratorKeyDown).Get(),
+ &accel_keydown_token_);
+ CheckHR(hr);
+
hr = window_->add_PointerWheelChanged(mswr::Callback<PointerEventHandler>(
this, &ChromeAppViewAsh::OnWheel).Get(),
&wheel_token_);
@@ -640,6 +659,55 @@
return S_OK;
}
+HRESULT ChromeAppViewAsh::OnAcceleratorKeyDown(
+ winui::Core::ICoreDispatcher* sender,
+ winui::Core::IAcceleratorKeyEventArgs* args) {
+ winsys::VirtualKey virtual_key;
+ HRESULT hr = args->get_VirtualKey(&virtual_key);
+ if (FAILED(hr))
+ return hr;
+ winui::Core::CorePhysicalKeyStatus status;
+ hr = args->get_KeyStatus(&status);
+ if (FAILED(hr))
+ return hr;
+
+ winui::Core::CoreAcceleratorKeyEventType event_type;
+ hr = args->get_EventType(&event_type);
+ if (FAILED(hr))
+ return hr;
+
+ // The AURA event handling code does not handle the system key down event for
+ // the Alt key if we pass in the flag EF_ALT_DOWN.
+ uint32 keyboard_flags = GetKeyboardEventFlags() & ~ui::EF_ALT_DOWN;
+
+ switch (event_type) {
+ case winui::Core::CoreAcceleratorKeyEventType_SystemCharacter:
+ ui_channel_->Send(new MetroViewerHostMsg_Character(virtual_key,
+ status.RepeatCount,
+ status.ScanCode,
+ keyboard_flags));
+ break;
+
+ case winui::Core::CoreAcceleratorKeyEventType_SystemKeyDown:
+ ui_channel_->Send(new MetroViewerHostMsg_KeyDown(virtual_key,
+ status.RepeatCount,
+ status.ScanCode,
+ keyboard_flags));
+ break;
+
+ case winui::Core::CoreAcceleratorKeyEventType_SystemKeyUp:
+ ui_channel_->Send(new MetroViewerHostMsg_KeyUp(virtual_key,
+ status.RepeatCount,
+ status.ScanCode,
+ keyboard_flags));
+ break;
+
+ default:
+ break;
+ }
+ return S_OK;
+}
+
HRESULT ChromeAppViewAsh::OnCharacterReceived(
winui::Core::ICoreWindow* sender,
winui::Core::ICharacterReceivedEventArgs* args) {
« no previous file with comments | « win8/metro_driver/chrome_app_view_ash.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698