Index: ash/accelerators/accelerator_filter.cc |
diff --git a/ash/accelerators/accelerator_filter.cc b/ash/accelerators/accelerator_filter.cc |
index dcc95ba9bd9c037f56383601b29a4ffb724b0278..bcecdfe2b1e80d6feb5b10d7ad326cc49d2de418 100644 |
--- a/ash/accelerators/accelerator_filter.cc |
+++ b/ash/accelerators/accelerator_filter.cc |
@@ -12,9 +12,22 @@ |
#include "ui/base/accelerators/accelerator_manager.h" |
namespace { |
+ |
const int kModifierFlagMask = (ui::EF_SHIFT_DOWN | |
ui::EF_CONTROL_DOWN | |
ui::EF_ALT_DOWN); |
+ |
+// Returns true if an Ash accelerator should be processed now. |
+bool ShouldProcessAcceleratorsNow(aura::Window* target) { |
+ if (!target) |
+ return true; |
+ if (target == ash::Shell::GetInstance()->GetRootWindow()) |
+ return true; |
+ // Unless |target| is the root window, return false to let the custom focus |
+ // manager (see ash/shell.cc) handle Ash accelerators. |
+ return false; |
+} |
+ |
} // namespace |
namespace ash { |
@@ -39,6 +52,8 @@ bool AcceleratorFilter::PreHandleKeyEvent(aura::Window* target, |
return false; |
if (event->is_char()) |
return false; |
+ if (!ShouldProcessAcceleratorsNow(target)) |
+ return false; |
ui::Accelerator accelerator(event->key_code(), |
event->flags() & kModifierFlagMask); |