Index: ash/wm/maximize_mode/maximize_mode_event_blocker.cc |
diff --git a/ash/wm/maximize_mode/maximize_mode_event_blocker.cc b/ash/wm/maximize_mode/maximize_mode_event_blocker.cc |
index e283149b6fe66755d368efea094e209f45419b0c..511b085c1b006e6491159c914428acde924e0af3 100644 |
--- a/ash/wm/maximize_mode/maximize_mode_event_blocker.cc |
+++ b/ash/wm/maximize_mode/maximize_mode_event_blocker.cc |
@@ -4,6 +4,8 @@ |
#include "ash/wm/maximize_mode/maximize_mode_event_blocker.h" |
+#include "ash/accelerators/accelerator_controller.h" |
+#include "ash/screenshot_delegate.h" |
#include "ash/shell.h" |
#include "base/memory/scoped_ptr.h" |
#include "ui/aura/client/cursor_client.h" |
@@ -15,7 +17,8 @@ namespace { |
// Event targeter to prevent delivery of mouse and touchpad events while |
// maximize mode is active. Other events such as touch are passed on to the |
-// default targeter. |
+// default targeter. Also handles a volume down + power key press to take a |
+// screenshot while instantiated. |
// TODO(flackr): This should only stop events from the internal keyboard and |
// touchpad. |
class BlockKeyboardAndTouchpadTargeter : public ui::EventTargeter { |
@@ -36,11 +39,15 @@ class BlockKeyboardAndTouchpadTargeter : public ui::EventTargeter { |
// as long as this targeter is alive. |
ui::EventTargeter* default_targeter_; |
+ // True when the volume down key is currently pressed. |
+ bool volume_down_pressed_; |
+ |
DISALLOW_COPY_AND_ASSIGN(BlockKeyboardAndTouchpadTargeter); |
}; |
BlockKeyboardAndTouchpadTargeter::BlockKeyboardAndTouchpadTargeter() |
- : default_targeter_(NULL) { |
+ : default_targeter_(NULL), |
+ volume_down_pressed_(false) { |
} |
BlockKeyboardAndTouchpadTargeter::~BlockKeyboardAndTouchpadTargeter() { |
@@ -54,8 +61,25 @@ void BlockKeyboardAndTouchpadTargeter::SetDefaultTargeter( |
ui::EventTarget* BlockKeyboardAndTouchpadTargeter::FindTargetForEvent( |
ui::EventTarget* root, |
ui::Event* event) { |
- if (event->HasNativeEvent() && (event->IsMouseEvent() || event->IsKeyEvent())) |
+ if (event->HasNativeEvent() && (event->IsMouseEvent() || |
+ event->IsKeyEvent())) { |
+#if defined(OS_CHROMEOS) |
+ if (event->IsKeyEvent()) { |
+ ui::KeyEvent* key_event = static_cast<ui::KeyEvent*>(event); |
+ if (key_event->key_code() == ui::VKEY_VOLUME_DOWN) { |
+ volume_down_pressed_ = key_event->type() == ui::ET_KEY_PRESSED; |
+ } else if (volume_down_pressed_ && |
+ key_event->key_code() == ui::VKEY_POWER && |
+ key_event->type() == ui::ET_KEY_PRESSED) { |
+ ScreenshotDelegate* screenshot_delegate = Shell::GetInstance()-> |
+ accelerator_controller()->screenshot_delegate(); |
+ if (screenshot_delegate && screenshot_delegate->CanTakeScreenshot()) |
+ screenshot_delegate->HandleTakeScreenshotForAllRootWindows(); |
sadrul
2014/05/02 00:59:08
I suspect this will need to be merged with bruthig
flackr
2014/05/07 04:08:44
Now it's just dependent on it, though I suspect al
|
+ } |
+ } |
+#endif |
return NULL; |
+ } |
return default_targeter_->FindTargetForEvent(root, event); |
} |