Index: ash/accelerators/ash_menu_event_filter_delegate.cc |
diff --git a/ash/accelerators/ash_menu_event_filter_delegate.cc b/ash/accelerators/ash_menu_event_filter_delegate.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..865fbfb3e208df2b2434184d19f6c55ef98b24e9 |
--- /dev/null |
+++ b/ash/accelerators/ash_menu_event_filter_delegate.cc |
@@ -0,0 +1,44 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ash/accelerators/ash_menu_event_filter_delegate.h" |
+ |
+#include "ash/accelerators/accelerator_controller.h" |
+#include "ash/shell.h" |
+#include "ui/views/controls/menu/menu_event_filter.h" |
+ |
+namespace ash { |
+ |
+AshMenuEventFilterDelegate::AshMenuEventFilterDelegate( |
+ ui::AcceleratorHistory* history) |
+ : accelerator_history_(history) { |
+ DCHECK(history); |
+} |
+ |
+AshMenuEventFilterDelegate::~AshMenuEventFilterDelegate() { |
+} |
+ |
+void AshMenuEventFilterDelegate::StoreInHistory( |
+ const ui::Accelerator& accelerator) { |
+ accelerator_history_->StoreCurrentAccelerator(accelerator); |
+} |
+ |
+bool AshMenuEventFilterDelegate::ProcessAccelerator( |
+ const ui::Accelerator& accelerator, |
+ views::MenuEventFilter* owner) { |
+ ash::AcceleratorController* accelerator_controller = |
+ ash::Shell::GetInstance()->accelerator_controller(); |
+ if (accelerator_controller->ShouldMenuBeKeptOpenForAccelerator(accelerator)) { |
+ // Menu will be kept open and accelerator will be handled now. |
+ accelerator_controller->Process(accelerator); |
+ // Event propagation should be stopped. |
+ return true; |
+ } |
+ |
+ // Menu should be closed and the event should continue propagation. |
+ owner->CloseMenu(); |
+ return false; |
+} |
+ |
+} // namespace ash |