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

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

Issue 230613004: Block keyboard and mouse input when maximize mode is activated by accelerometer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with master. Created 6 years, 8 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') | ui/aura/scoped_window_targeter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ash/wm/maximize_mode/maximize_mode_event_blocker.h"
6
7 #include "ash/shell.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "ui/aura/client/cursor_client.h"
10 #include "ui/events/event_targeter.h"
11
12 namespace ash {
13
14 namespace {
15
16 // 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
18 // default targeter.
19 // TODO(flackr): This should only stop events from the internal keyboard and
20 // touchpad.
21 class BlockKeyboardAndTouchpadTargeter : public ui::EventTargeter {
22 public:
23 BlockKeyboardAndTouchpadTargeter();
24 virtual ~BlockKeyboardAndTouchpadTargeter();
25
26 // Sets the default targeter to use when the event is not being blocked.
27 void SetDefaultTargeter(EventTargeter* default_targeter);
28
29 // Overridden from ui::EventTargeter:
30 virtual ui::EventTarget* FindTargetForEvent(ui::EventTarget* root,
31 ui::Event* event) OVERRIDE;
32
33 private:
34 // A weak pointer to the targeter this targeter is wrapping. The
35 // default_targeter is owned by the ScopedWindowTargeter which will be valid
36 // as long as this targeter is alive.
37 ui::EventTargeter* default_targeter_;
38
39 DISALLOW_COPY_AND_ASSIGN(BlockKeyboardAndTouchpadTargeter);
40 };
41
42 BlockKeyboardAndTouchpadTargeter::BlockKeyboardAndTouchpadTargeter()
43 : default_targeter_(NULL) {
44 }
45
46 BlockKeyboardAndTouchpadTargeter::~BlockKeyboardAndTouchpadTargeter() {
47 }
48
49 void BlockKeyboardAndTouchpadTargeter::SetDefaultTargeter(
50 ui::EventTargeter* default_targeter) {
51 default_targeter_ = default_targeter;
52 }
53
54 ui::EventTarget* BlockKeyboardAndTouchpadTargeter::FindTargetForEvent(
55 ui::EventTarget* root,
56 ui::Event* event) {
57 if (event->HasNativeEvent() && (event->IsMouseEvent() || event->IsKeyEvent()))
58 return NULL;
59 return default_targeter_->FindTargetForEvent(root, event);
60 }
61
62 } // namespace
63
64 MaximizeModeEventBlocker::MaximizeModeEventBlocker() {
65 Shell::GetInstance()->AddShellObserver(this);
66
67 // Hide the cursor as mouse events will be blocked.
68 aura::client::CursorClient* cursor_client_ =
69 aura::client::GetCursorClient(Shell::GetTargetRootWindow());
70 if (cursor_client_)
71 cursor_client_->HideCursor();
72
73 // Block keyboard and mouse events on all existing and new root windows for
74 // the lifetime of this class.
75 aura::Window::Windows root_windows(Shell::GetAllRootWindows());
76 for (aura::Window::Windows::iterator iter = root_windows.begin();
77 iter != root_windows.end(); ++iter) {
78 AddEventTargeterOn(*iter);
79 }
80 }
81
82 MaximizeModeEventBlocker::~MaximizeModeEventBlocker() {
83 Shell::GetInstance()->RemoveShellObserver(this);
84 }
85
86 void MaximizeModeEventBlocker::OnRootWindowAdded(aura::Window* root_window) {
87 AddEventTargeterOn(root_window);
88 }
89
90 void MaximizeModeEventBlocker::AddEventTargeterOn(
91 aura::Window* root_window) {
92 BlockKeyboardAndTouchpadTargeter* targeter =
93 new BlockKeyboardAndTouchpadTargeter();
94 aura::ScopedWindowTargeter* scoped_targeter = new aura::ScopedWindowTargeter(
95 root_window, scoped_ptr<ui::EventTargeter>(targeter));
96 targeter->SetDefaultTargeter(scoped_targeter->old_targeter());
97 targeters_.push_back(scoped_targeter);
98 }
99
100 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/maximize_mode/maximize_mode_event_blocker.h ('k') | ui/aura/scoped_window_targeter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698