Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: ash/wm/maximize_mode/maximize_mode_event_blocker.cc

Issue 263813002: Take a screenshot in maximize mode when volume down and power are pressed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: POWER key not defined in windows. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/wm/maximize_mode/maximize_mode_event_blocker.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/wm/maximize_mode/maximize_mode_event_blocker.h" 5 #include "ash/wm/maximize_mode/maximize_mode_event_blocker.h"
6 6
7 #include "ash/accelerators/accelerator_controller.h"
8 #include "ash/screenshot_delegate.h"
7 #include "ash/shell.h" 9 #include "ash/shell.h"
8 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
9 #include "ui/aura/client/cursor_client.h" 11 #include "ui/aura/client/cursor_client.h"
10 #include "ui/events/event_targeter.h" 12 #include "ui/events/event_targeter.h"
11 13
12 namespace ash { 14 namespace ash {
13 15
14 namespace { 16 namespace {
15 17
16 // Event targeter to prevent delivery of mouse and touchpad events while 18 // Event targeter to prevent delivery of mouse and touchpad events while
17 // maximize mode is active. Other events such as touch are passed on to the 19 // maximize mode is active. Other events such as touch are passed on to the
18 // default targeter. 20 // default targeter. Also handles a volume down + power key press to take a
21 // screenshot while instantiated.
19 // TODO(flackr): This should only stop events from the internal keyboard and 22 // TODO(flackr): This should only stop events from the internal keyboard and
20 // touchpad. 23 // touchpad.
21 class BlockKeyboardAndTouchpadTargeter : public ui::EventTargeter { 24 class BlockKeyboardAndTouchpadTargeter : public ui::EventTargeter {
22 public: 25 public:
23 BlockKeyboardAndTouchpadTargeter(); 26 BlockKeyboardAndTouchpadTargeter();
24 virtual ~BlockKeyboardAndTouchpadTargeter(); 27 virtual ~BlockKeyboardAndTouchpadTargeter();
25 28
26 // Sets the default targeter to use when the event is not being blocked. 29 // Sets the default targeter to use when the event is not being blocked.
27 void SetDefaultTargeter(EventTargeter* default_targeter); 30 void SetDefaultTargeter(EventTargeter* default_targeter);
28 31
29 // Overridden from ui::EventTargeter: 32 // Overridden from ui::EventTargeter:
30 virtual ui::EventTarget* FindTargetForEvent(ui::EventTarget* root, 33 virtual ui::EventTarget* FindTargetForEvent(ui::EventTarget* root,
31 ui::Event* event) OVERRIDE; 34 ui::Event* event) OVERRIDE;
32 35
33 private: 36 private:
34 // A weak pointer to the targeter this targeter is wrapping. The 37 // A weak pointer to the targeter this targeter is wrapping. The
35 // default_targeter is owned by the ScopedWindowTargeter which will be valid 38 // default_targeter is owned by the ScopedWindowTargeter which will be valid
36 // as long as this targeter is alive. 39 // as long as this targeter is alive.
37 ui::EventTargeter* default_targeter_; 40 ui::EventTargeter* default_targeter_;
38 41
42 // True when the volume down key is currently pressed.
43 bool volume_down_pressed_;
44
39 DISALLOW_COPY_AND_ASSIGN(BlockKeyboardAndTouchpadTargeter); 45 DISALLOW_COPY_AND_ASSIGN(BlockKeyboardAndTouchpadTargeter);
40 }; 46 };
41 47
42 BlockKeyboardAndTouchpadTargeter::BlockKeyboardAndTouchpadTargeter() 48 BlockKeyboardAndTouchpadTargeter::BlockKeyboardAndTouchpadTargeter()
43 : default_targeter_(NULL) { 49 : default_targeter_(NULL),
50 volume_down_pressed_(false) {
44 } 51 }
45 52
46 BlockKeyboardAndTouchpadTargeter::~BlockKeyboardAndTouchpadTargeter() { 53 BlockKeyboardAndTouchpadTargeter::~BlockKeyboardAndTouchpadTargeter() {
47 } 54 }
48 55
49 void BlockKeyboardAndTouchpadTargeter::SetDefaultTargeter( 56 void BlockKeyboardAndTouchpadTargeter::SetDefaultTargeter(
50 ui::EventTargeter* default_targeter) { 57 ui::EventTargeter* default_targeter) {
51 default_targeter_ = default_targeter; 58 default_targeter_ = default_targeter;
52 } 59 }
53 60
54 ui::EventTarget* BlockKeyboardAndTouchpadTargeter::FindTargetForEvent( 61 ui::EventTarget* BlockKeyboardAndTouchpadTargeter::FindTargetForEvent(
55 ui::EventTarget* root, 62 ui::EventTarget* root,
56 ui::Event* event) { 63 ui::Event* event) {
57 if (event->HasNativeEvent() && (event->IsMouseEvent() || event->IsKeyEvent())) 64 if (event->HasNativeEvent() && (event->IsMouseEvent() ||
65 event->IsKeyEvent())) {
66 #if defined(OS_CHROMEOS)
67 if (event->IsKeyEvent()) {
68 ui::KeyEvent* key_event = static_cast<ui::KeyEvent*>(event);
69 if (key_event->key_code() == ui::VKEY_VOLUME_DOWN) {
70 volume_down_pressed_ = key_event->type() == ui::ET_KEY_PRESSED;
71 } else if (volume_down_pressed_ &&
72 key_event->key_code() == ui::VKEY_POWER &&
73 key_event->type() == ui::ET_KEY_PRESSED) {
74 ScreenshotDelegate* screenshot_delegate = Shell::GetInstance()->
75 accelerator_controller()->screenshot_delegate();
76 if (screenshot_delegate && screenshot_delegate->CanTakeScreenshot())
77 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
78 }
79 }
80 #endif
58 return NULL; 81 return NULL;
82 }
59 return default_targeter_->FindTargetForEvent(root, event); 83 return default_targeter_->FindTargetForEvent(root, event);
60 } 84 }
61 85
62 } // namespace 86 } // namespace
63 87
64 MaximizeModeEventBlocker::MaximizeModeEventBlocker() { 88 MaximizeModeEventBlocker::MaximizeModeEventBlocker() {
65 Shell::GetInstance()->AddShellObserver(this); 89 Shell::GetInstance()->AddShellObserver(this);
66 90
67 // Hide the cursor as mouse events will be blocked. 91 // Hide the cursor as mouse events will be blocked.
68 aura::client::CursorClient* cursor_client_ = 92 aura::client::CursorClient* cursor_client_ =
(...skipping 22 matching lines...) Expand all
91 aura::Window* root_window) { 115 aura::Window* root_window) {
92 BlockKeyboardAndTouchpadTargeter* targeter = 116 BlockKeyboardAndTouchpadTargeter* targeter =
93 new BlockKeyboardAndTouchpadTargeter(); 117 new BlockKeyboardAndTouchpadTargeter();
94 aura::ScopedWindowTargeter* scoped_targeter = new aura::ScopedWindowTargeter( 118 aura::ScopedWindowTargeter* scoped_targeter = new aura::ScopedWindowTargeter(
95 root_window, scoped_ptr<ui::EventTargeter>(targeter)); 119 root_window, scoped_ptr<ui::EventTargeter>(targeter));
96 targeter->SetDefaultTargeter(scoped_targeter->old_targeter()); 120 targeter->SetDefaultTargeter(scoped_targeter->old_targeter());
97 targeters_.push_back(scoped_targeter); 121 targeters_.push_back(scoped_targeter);
98 } 122 }
99 123
100 } // namespace ash 124 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/maximize_mode/maximize_mode_event_blocker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698