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

Side by Side Diff: ui/events/ozone/evdev/keyboard_evdev.cc

Issue 959923002: Fix CapsLock remapping. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 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 "ui/events/ozone/evdev/keyboard_evdev.h" 5 #include "ui/events/ozone/evdev/keyboard_evdev.h"
6 6
7 #include "ui/events/event.h" 7 #include "ui/events/event.h"
8 #include "ui/events/event_constants.h" 8 #include "ui/events/event_constants.h"
9 #include "ui/events/event_utils.h" 9 #include "ui/events/event_utils.h"
10 #include "ui/events/keycodes/dom4/keycode_converter.h" 10 #include "ui/events/keycodes/dom4/keycode_converter.h"
11 #include "ui/events/ozone/evdev/event_modifiers_evdev.h" 11 #include "ui/events/ozone/evdev/event_modifiers_evdev.h"
12 #include "ui/events/ozone/evdev/keyboard_util_evdev.h" 12 #include "ui/events/ozone/evdev/keyboard_util_evdev.h"
13 #include "ui/events/ozone/layout/keyboard_layout_engine.h" 13 #include "ui/events/ozone/layout/keyboard_layout_engine.h"
14 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" 14 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
15 #include "ui/events/ozone/layout/layout_util.h" 15 #include "ui/events/ozone/layout/layout_util.h"
16 16
17 namespace ui { 17 namespace ui {
18 18
19 namespace { 19 namespace {
20 20
21 const int kRepeatDelayMs = 500; 21 const int kRepeatDelayMs = 500;
22 const int kRepeatIntervalMs = 50; 22 const int kRepeatIntervalMs = 50;
23 23
24 int EventFlagToEvdevModifier(int flag) { 24 int EventFlagToEvdevModifier(int flag) {
25 switch (flag) { 25 switch (flag) {
26 case EF_CAPS_LOCK_DOWN: 26 case EF_CAPS_LOCK_DOWN:
27 return EVDEV_MODIFIER_CAPS_LOCK; 27 return EVDEV_MODIFIER_CAPS_LOCKED_STATE;
28 case EF_MOD3_DOWN:
29 return EVDEV_MODIFIER_CAPS_LOCK_HELD;
28 case EF_SHIFT_DOWN: 30 case EF_SHIFT_DOWN:
29 return EVDEV_MODIFIER_SHIFT; 31 return EVDEV_MODIFIER_SHIFT;
30 case EF_CONTROL_DOWN: 32 case EF_CONTROL_DOWN:
31 return EVDEV_MODIFIER_CONTROL; 33 return EVDEV_MODIFIER_CONTROL;
32 case EF_ALT_DOWN: 34 case EF_ALT_DOWN:
33 return EVDEV_MODIFIER_ALT; 35 return EVDEV_MODIFIER_ALT;
34 case EF_ALTGR_DOWN: 36 case EF_ALTGR_DOWN:
35 return EVDEV_MODIFIER_ALTGR; 37 return EVDEV_MODIFIER_ALTGR;
36 case EF_LEFT_MOUSE_BUTTON: 38 case EF_LEFT_MOUSE_BUTTON:
37 return EVDEV_MODIFIER_LEFT_MOUSE_BUTTON; 39 return EVDEV_MODIFIER_LEFT_MOUSE_BUTTON;
38 case EF_MIDDLE_MOUSE_BUTTON: 40 case EF_MIDDLE_MOUSE_BUTTON:
39 return EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON; 41 return EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON;
40 case EF_RIGHT_MOUSE_BUTTON: 42 case EF_RIGHT_MOUSE_BUTTON:
41 return EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON; 43 return EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON;
42 case EF_COMMAND_DOWN: 44 case EF_COMMAND_DOWN:
43 return EVDEV_MODIFIER_COMMAND; 45 return EVDEV_MODIFIER_COMMAND;
44 default: 46 default:
45 return EVDEV_MODIFIER_NONE; 47 return EVDEV_MODIFIER_NONE;
46 } 48 }
47 } 49 }
48 50
49 bool IsModifierLock(int evdev_modifier) {
50 return evdev_modifier == EVDEV_MODIFIER_CAPS_LOCK;
51 }
52
53 } // namespace 51 } // namespace
54 52
55 KeyboardEvdev::KeyboardEvdev(EventModifiersEvdev* modifiers, 53 KeyboardEvdev::KeyboardEvdev(EventModifiersEvdev* modifiers,
56 KeyboardLayoutEngine* keyboard_layout_engine, 54 KeyboardLayoutEngine* keyboard_layout_engine,
57 const EventDispatchCallback& callback) 55 const EventDispatchCallback& callback)
58 : callback_(callback), 56 : callback_(callback),
59 modifiers_(modifiers), 57 modifiers_(modifiers),
60 keyboard_layout_engine_(keyboard_layout_engine), 58 keyboard_layout_engine_(keyboard_layout_engine),
61 repeat_enabled_(true), 59 repeat_enabled_(true),
62 repeat_key_(KEY_RESERVED) { 60 repeat_key_(KEY_RESERVED) {
(...skipping 17 matching lines...) Expand all
80 if (down) 78 if (down)
81 key_state_.set(key); 79 key_state_.set(key);
82 else 80 else
83 key_state_.reset(key); 81 key_state_.reset(key);
84 82
85 UpdateKeyRepeat(key, down); 83 UpdateKeyRepeat(key, down);
86 DispatchKey(key, down, false /* repeat */, timestamp); 84 DispatchKey(key, down, false /* repeat */, timestamp);
87 } 85 }
88 86
89 void KeyboardEvdev::SetCapsLockEnabled(bool enabled) { 87 void KeyboardEvdev::SetCapsLockEnabled(bool enabled) {
90 modifiers_->SetModifierLock(EVDEV_MODIFIER_CAPS_LOCK, enabled); 88 modifiers_->SetModifierLock(EVDEV_MODIFIER_CAPS_LOCKED_STATE, enabled);
91 } 89 }
92 90
93 bool KeyboardEvdev::IsCapsLockEnabled() { 91 bool KeyboardEvdev::IsCapsLockEnabled() {
94 return (modifiers_->GetModifierFlags() & EF_CAPS_LOCK_DOWN) != 0; 92 return (modifiers_->GetModifierLockFlags() & EF_CAPS_LOCK_DOWN) != 0;
95 } 93 }
96 94
97 bool KeyboardEvdev::IsAutoRepeatEnabled() { 95 bool KeyboardEvdev::IsAutoRepeatEnabled() {
98 return repeat_enabled_; 96 return repeat_enabled_;
99 } 97 }
100 98
101 void KeyboardEvdev::SetAutoRepeatEnabled(bool enabled) { 99 void KeyboardEvdev::SetAutoRepeatEnabled(bool enabled) {
102 repeat_enabled_ = enabled; 100 repeat_enabled_ = enabled;
103 } 101 }
104 102
105 void KeyboardEvdev::SetAutoRepeatRate(const base::TimeDelta& delay, 103 void KeyboardEvdev::SetAutoRepeatRate(const base::TimeDelta& delay,
106 const base::TimeDelta& interval) { 104 const base::TimeDelta& interval) {
107 repeat_delay_ = delay; 105 repeat_delay_ = delay;
108 repeat_interval_ = interval; 106 repeat_interval_ = interval;
109 } 107 }
110 108
111 void KeyboardEvdev::GetAutoRepeatRate(base::TimeDelta* delay, 109 void KeyboardEvdev::GetAutoRepeatRate(base::TimeDelta* delay,
112 base::TimeDelta* interval) { 110 base::TimeDelta* interval) {
113 *delay = repeat_delay_; 111 *delay = repeat_delay_;
114 *interval = repeat_interval_; 112 *interval = repeat_interval_;
115 } 113 }
116 114
117 void KeyboardEvdev::UpdateModifier(int modifier_flag, bool down) { 115 void KeyboardEvdev::UpdateModifier(int modifier_flag, bool down) {
118 if (modifier_flag == EF_NONE) 116 if (modifier_flag == EF_NONE)
119 return; 117 return;
120 118
121 int modifier = EventFlagToEvdevModifier(modifier_flag); 119 int modifier = EventFlagToEvdevModifier(modifier_flag);
122 if (modifier == EVDEV_MODIFIER_NONE) 120 if (modifier == EVDEV_MODIFIER_NONE)
123 return; 121 return;
124 122 modifiers_->UpdateModifier(modifier, down);
spang 2015/02/25 22:03:28 Wouldn't it work to just do // TODO: Do key remap
kpschoedel 2015/02/25 23:03:06 Done.
125 if (IsModifierLock(modifier))
126 modifiers_->UpdateModifierLock(modifier, down);
127 else
128 modifiers_->UpdateModifier(modifier, down);
129 } 123 }
130 124
131 void KeyboardEvdev::UpdateKeyRepeat(unsigned int key, bool down) { 125 void KeyboardEvdev::UpdateKeyRepeat(unsigned int key, bool down) {
132 if (!repeat_enabled_) 126 if (!repeat_enabled_)
133 StopKeyRepeat(); 127 StopKeyRepeat();
134 else if (key != repeat_key_ && down) 128 else if (key != repeat_key_ && down)
135 StartKeyRepeat(key); 129 StartKeyRepeat(key);
136 else if (key == repeat_key_ && !down) 130 else if (key == repeat_key_ && !down)
137 StopKeyRepeat(); 131 StopKeyRepeat();
138 } 132 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 UpdateModifier(ModifierDomKeyToEventFlag(dom_key), down); 183 UpdateModifier(ModifierDomKeyToEventFlag(dom_key), down);
190 184
191 KeyEvent event(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code, 185 KeyEvent event(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code,
192 modifiers_->GetModifierFlags(), dom_key, character, timestamp); 186 modifiers_->GetModifierFlags(), dom_key, character, timestamp);
193 if (platform_keycode) 187 if (platform_keycode)
194 event.set_platform_keycode(platform_keycode); 188 event.set_platform_keycode(platform_keycode);
195 callback_.Run(&event); 189 callback_.Run(&event);
196 } 190 }
197 191
198 } // namespace ui 192 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698