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

Side by Side Diff: chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc

Issue 240173007: Convert KeyboardDrivenEventRewriter to a ui::EventRewriter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments on Patch Set 4 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h" 5 #include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
6 6
7 #include <X11/Xlib.h>
8
9 #include "chrome/browser/chromeos/login/user_manager.h" 7 #include "chrome/browser/chromeos/login/user_manager.h"
10 #include "chrome/browser/chromeos/system/input_device_settings.h" 8 #include "chrome/browser/chromeos/system/input_device_settings.h"
9 #include "ui/events/event.h"
11 #include "ui/events/event_utils.h" 10 #include "ui/events/event_utils.h"
12 11
13 namespace chromeos { 12 namespace chromeos {
14 13
15 namespace { 14 namespace {
16 15
17 const int kModifierMask = ui::EF_SHIFT_DOWN; 16 const int kModifierMask = ui::EF_SHIFT_DOWN;
18 17
19 // Returns true if and only if it is on login screen (i.e. user is not logged 18 // Returns true if and only if it is on login screen (i.e. user is not logged
20 // in) and the keyboard driven flag in the OEM manifest is on. 19 // in) and the keyboard driven flag in the OEM manifest is on.
21 bool ShouldStripModifiersForArrowKeysAndEnter() { 20 bool ShouldStripModifiersForArrowKeysAndEnter() {
22 if (UserManager::IsInitialized() && 21 if (UserManager::IsInitialized() &&
23 !UserManager::Get()->IsSessionStarted()) { 22 !UserManager::Get()->IsSessionStarted()) {
24 return system::InputDeviceSettings::Get() 23 return system::InputDeviceSettings::Get()
25 ->ForceKeyboardDrivenUINavigation(); 24 ->ForceKeyboardDrivenUINavigation();
26 } 25 }
27 26
28 return false; 27 return false;
29 } 28 }
30 29
31 } // namespace 30 } // namespace
32 31
33 KeyboardDrivenEventRewriter::KeyboardDrivenEventRewriter() {} 32 KeyboardDrivenEventRewriter::KeyboardDrivenEventRewriter() {}
34 33
35 KeyboardDrivenEventRewriter::~KeyboardDrivenEventRewriter() {} 34 KeyboardDrivenEventRewriter::~KeyboardDrivenEventRewriter() {}
36 35
37 bool KeyboardDrivenEventRewriter::RewriteIfKeyboardDrivenOnLoginScreen( 36 ui::EventRewriteStatus KeyboardDrivenEventRewriter::RewriteForTesting(
38 XEvent* event) { 37 const ui::Event& event,
39 if (!ShouldStripModifiersForArrowKeysAndEnter()) 38 scoped_ptr<ui::Event>* rewritten_event) {
40 return false; 39 return Rewrite(event, rewritten_event);
41
42 return RewriteEvent(event);
43 } 40 }
44 41
45 bool KeyboardDrivenEventRewriter::RewriteForTesting(XEvent* event) { 42 ui::EventRewriteStatus KeyboardDrivenEventRewriter::RewriteEvent(
46 return RewriteEvent(event); 43 const ui::Event& event,
44 scoped_ptr<ui::Event>* rewritten_event) {
45 if (!ShouldStripModifiersForArrowKeysAndEnter())
46 return ui::EVENT_REWRITE_CONTINUE;
47
48 return Rewrite(event, rewritten_event);
47 } 49 }
48 50
49 bool KeyboardDrivenEventRewriter::RewriteEvent(XEvent* event) { 51 ui::EventRewriteStatus KeyboardDrivenEventRewriter::NextDispatchEvent(
50 int flags = ui::EventFlagsFromNative(event); 52 const ui::Event& last_event,
53 scoped_ptr<ui::Event>* new_event) {
54 NOTREACHED();
55 return ui::EVENT_REWRITE_CONTINUE;
56 }
57
58 ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite(
59 const ui::Event& event,
60 scoped_ptr<ui::Event>* rewritten_event) {
61 int flags = event.flags();
51 if ((flags & kModifierMask) != kModifierMask) 62 if ((flags & kModifierMask) != kModifierMask)
52 return false; 63 return ui::EVENT_REWRITE_CONTINUE;
53 ui::KeyboardCode key_code = ui::KeyboardCodeFromNative(event); 64
65 DCHECK(event.type() == ui::ET_KEY_PRESSED ||
66 event.type() == ui::ET_KEY_RELEASED)
67 << "Unexpected event type " << event.type();
68 const ui::KeyEvent& key_event = static_cast<const ui::KeyEvent&>(event);
69 ui::KeyboardCode key_code = key_event.key_code();
54 70
55 if (key_code != ui::VKEY_LEFT && 71 if (key_code != ui::VKEY_LEFT &&
56 key_code != ui::VKEY_RIGHT && 72 key_code != ui::VKEY_RIGHT &&
57 key_code != ui::VKEY_UP && 73 key_code != ui::VKEY_UP &&
58 key_code != ui::VKEY_DOWN && 74 key_code != ui::VKEY_DOWN &&
59 key_code != ui::VKEY_RETURN && 75 key_code != ui::VKEY_RETURN &&
60 key_code != ui::VKEY_F6) { 76 key_code != ui::VKEY_F6) {
61 return false; 77 return ui::EVENT_REWRITE_CONTINUE;
62 } 78 }
63 79
64 XKeyEvent* xkey = &(event->xkey); 80 rewritten_event->reset(new ui::KeyEvent(key_event));
65 xkey->state &= ~(ControlMask | Mod1Mask | ShiftMask); 81 (*rewritten_event)->set_flags(
66 return true; 82 flags & ~(ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN));
83 return ui::EVENT_REWRITE_REWRITTEN;
67 } 84 }
68 85
69 } // namespace chromeos 86 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698