Index: ash/accelerators/accelerator_delegate.cc |
diff --git a/ash/accelerators/accelerator_delegate.cc b/ash/accelerators/accelerator_delegate.cc |
index dc83437aceef6f0d5863cfbd4a42a14e9081e8be..687c2f0385fd874ff36b6eb5735323b295ac346c 100644 |
--- a/ash/accelerators/accelerator_delegate.cc |
+++ b/ash/accelerators/accelerator_delegate.cc |
@@ -27,6 +27,24 @@ void AcceleratorDelegate::PreProcessAccelerator( |
accelerator); |
} |
+bool AcceleratorDelegate::ProcessAccelerator(const ui::KeyEvent& key_event, |
+ const ui::Accelerator& accelerator, |
+ KeyType key_type) { |
+ // Special hardware keys like brightness and volume are handled in |
+ // special way. However, some windows can override this behavior |
+ // (e.g. Chrome v1 apps by default and Chrome v2 apps with |
+ // permission) by setting a window property. |
+ if (key_type == KEY_TYPE_SYSTEM && !CanConsumeSystemKeys(key_event)) { |
+ // System keys are always consumed regardless of whether they trigger an |
+ // accelerator to prevent windows from seeing unexpected key up events. |
+ Shell::GetInstance()->accelerator_controller()->Process(accelerator); |
+ return true; |
+ } |
+ if (!ShouldProcessAcceleratorNow(key_event, accelerator)) |
oshima
2014/05/30 23:50:28
FYI: The rest of code has to be run for both OTHER
|
+ return false; |
+ return Shell::GetInstance()->accelerator_controller()->Process(accelerator); |
+} |
+ |
// Uses the top level window so if the target is a web contents window the |
// containing parent window will be checked for the property. |
bool AcceleratorDelegate::CanConsumeSystemKeys(const ui::KeyEvent& event) { |
@@ -53,7 +71,9 @@ bool AcceleratorDelegate::ShouldProcessAcceleratorNow( |
// A full screen window should be able to handle all key events including the |
// reserved ones. |
- if (wm::GetWindowState(target)->IsFullscreen()) { |
+ aura::Window* top_level = ::wm::GetToplevelWindow(target); |
+ |
+ if (top_level && wm::GetWindowState(top_level)->IsFullscreen()) { |
// TODO(yusukes): On Chrome OS, only browser and flash windows can be full |
// screen. Launching an app in "open full-screen" mode is not supported yet. |
// That makes the IsWindowFullscreen() check above almost meaningless |
@@ -71,9 +91,4 @@ bool AcceleratorDelegate::ShouldProcessAcceleratorNow( |
accelerator); |
} |
-bool AcceleratorDelegate::ProcessAccelerator( |
- const ui::Accelerator& accelerator) { |
- return Shell::GetInstance()->accelerator_controller()->Process(accelerator); |
-} |
- |
} // namespace ash |