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..78eee3a82793ce038acb390f4dc765da623f8d8e 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 |
+#if defined(USE_ASH) |
+void ProcessAcceleratorNow(const ui::Accelerator& accelerator) { |
+ // 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,30 @@ void ChromeViewsDelegate::NotifyAccessibilityEvent( |
#endif |
} |
+views::ViewsDelegate::ProcessMenuAcceleratorResult |
+ChromeViewsDelegate::ProcessAcceleratorWhileMenuShowing( |
+ const ui::Accelerator& accelerator) { |
+#if defined(USE_ASH) |
+ ash::AcceleratorController* accelerator_controller = |
+ ash::Shell::GetInstance()->accelerator_controller(); |
+ |
+ accelerator_controller->accelerator_history()->StoreCurrentAccelerator( |
+ accelerator); |
+ if (accelerator_controller->ShouldCloseMenuAndRepostAccelerator( |
+ accelerator)) { |
+ base::MessageLoopForUI::current()->PostTask( |
+ FROM_HERE, |
+ base::Bind(ProcessAcceleratorNow, accelerator)); |
+ return views::ViewsDelegate::ProcessMenuAcceleratorResult::CLOSE_MENU; |
+ } |
+ |
+ ProcessAcceleratorNow(accelerator); |
+ return views::ViewsDelegate::ProcessMenuAcceleratorResult::LEAVE_MENU_OPEN; |
+#else |
+ return views::ViewsDelegate::ProcessMenuAcceleratorResult::LEAVE_MENU_OPEN; |
+#endif // defined(USE_ASH) |
+} |
+ |
#if defined(OS_WIN) |
HICON ChromeViewsDelegate::GetDefaultWindowIcon() const { |
return GetAppIcon(); |