Chromium Code Reviews| Index: chrome/browser/ui/views/chrome_views_delegate.cc |
| diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc |
| index 0fc0bbbb98df196ca4925383202f154e24ff0bdd..3ae0c415c9bc6235d8d98c4eea83e24d35408c8f 100644 |
| --- a/chrome/browser/ui/views/chrome_views_delegate.cc |
| +++ b/chrome/browser/ui/views/chrome_views_delegate.cc |
| @@ -21,6 +21,7 @@ |
| #include "ui/base/ui_base_switches.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "ui/gfx/screen.h" |
| +#include "ui/views/controls/menu/menu_controller.h" |
| #include "ui/views/widget/native_widget.h" |
| #include "ui/views/widget/widget.h" |
| @@ -52,6 +53,7 @@ |
| #endif |
| #if defined(USE_ASH) |
| +#include "ash/accelerators/accelerator_controller.h" |
| #include "ash/shell.h" |
| #include "ash/wm/window_state.h" |
| #include "chrome/browser/ui/ash/ash_init.h" |
| @@ -126,6 +128,14 @@ int GetAppbarAutohideEdgesOnWorkerThread(HMONITOR monitor) { |
| } |
| #endif |
| +void ProcessAcceleratorNow(const ui::Accelerator& accelerator) { |
| +#if defined(USE_ASH) |
|
oshima
2015/09/08 21:43:08
entire ProcessAcceleratorNow function can be ifdef
afakhry
2015/09/08 23:34:37
Done.
|
| + // TODO(afakhry): See if we need here to send the accelerator to the |
| + // FocusManager of the active window in a follow-up CL. |
| + ash::Shell::GetInstance()->accelerator_controller()->Process(accelerator); |
| +#endif // defined(USE_ASH) |
| +} |
| + |
| } // namespace |
| @@ -220,6 +230,32 @@ void ChromeViewsDelegate::NotifyAccessibilityEvent( |
| #endif |
| } |
| +void ChromeViewsDelegate::HandleKeyEventOnMenu(ui::KeyEvent* event) { |
| +#if defined(USE_ASH) |
| + views::MenuController* menu_controller = |
| + views::MenuController::GetActiveInstance(); |
| + |
| + if (!menu_controller) |
| + return; |
| + |
| + ui::Accelerator accelerator(*event); |
| + ash::AcceleratorController* accelerator_controller = |
| + ash::Shell::GetInstance()->accelerator_controller(); |
| + |
| + accelerator_controller->accelerator_history()->StoreCurrentAccelerator( |
| + accelerator); |
| + if (accelerator_controller->ShouldCloseMenuAndRepostAccelerator( |
| + accelerator)) { |
| + menu_controller->CancelAll(); |
| + base::MessageLoopForUI::current()->PostTask( |
| + FROM_HERE, |
| + base::Bind(ProcessAcceleratorNow, accelerator)); |
| + } else { |
| + ProcessAcceleratorNow(accelerator); |
| + } |
| +#endif // defined(USE_ASH) |
| +} |
| + |
| #if defined(OS_WIN) |
| HICON ChromeViewsDelegate::GetDefaultWindowIcon() const { |
| return GetAppIcon(); |