OLD | NEW |
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 "base/single_thread_task_runner.h" | 7 #include "base/single_thread_task_runner.h" |
8 #include "base/thread_task_runner_handle.h" | 8 #include "base/thread_task_runner_handle.h" |
9 #include "ui/events/event.h" | 9 #include "ui/events/event.h" |
10 #include "ui/events/event_constants.h" | 10 #include "ui/events/event_constants.h" |
11 #include "ui/events/event_utils.h" | 11 #include "ui/events/event_utils.h" |
| 12 #include "ui/events/keycodes/dom/dom_code.h" |
12 #include "ui/events/keycodes/dom/keycode_converter.h" | 13 #include "ui/events/keycodes/dom/keycode_converter.h" |
13 #include "ui/events/ozone/evdev/event_modifiers_evdev.h" | 14 #include "ui/events/ozone/evdev/event_modifiers_evdev.h" |
14 #include "ui/events/ozone/evdev/keyboard_util_evdev.h" | 15 #include "ui/events/ozone/evdev/keyboard_util_evdev.h" |
15 #include "ui/events/ozone/layout/keyboard_layout_engine.h" | 16 #include "ui/events/ozone/layout/keyboard_layout_engine.h" |
16 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" | 17 #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" |
17 #include "ui/events/ozone/layout/layout_util.h" | 18 #include "ui/events/ozone/layout/layout_util.h" |
18 | 19 |
19 namespace ui { | 20 namespace ui { |
20 | 21 |
21 // We can't include ui/events/keycodes/dom/dom_code.h here because of | |
22 // conflicts with preprocessor macros in <linux/input.h>, so we use the | |
23 // same underlying data with an additional prefix. | |
24 #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) DOM_CODE_ ## id = usb | |
25 #define USB_KEYMAP_DECLARATION enum class DomCode | |
26 #include "ui/events/keycodes/dom/keycode_converter_data.inc" | |
27 #undef USB_KEYMAP | |
28 #undef USB_KEYMAP_DECLARATION | |
29 | |
30 namespace { | 22 namespace { |
31 | 23 |
32 const int kRepeatDelayMs = 500; | 24 const int kRepeatDelayMs = 500; |
33 const int kRepeatIntervalMs = 50; | 25 const int kRepeatIntervalMs = 50; |
34 | 26 |
35 int EventFlagToEvdevModifier(int flag) { | 27 int EventFlagToEvdevModifier(int flag) { |
36 switch (flag) { | 28 switch (flag) { |
37 case EF_CAPS_LOCK_DOWN: | 29 case EF_CAPS_LOCK_DOWN: |
38 return EVDEV_MODIFIER_CAPS_LOCK; | 30 return EVDEV_MODIFIER_CAPS_LOCK; |
39 case EF_SHIFT_DOWN: | 31 case EF_SHIFT_DOWN: |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 | 146 |
155 void KeyboardEvdev::RefreshModifiers() { | 147 void KeyboardEvdev::RefreshModifiers() { |
156 // Release all keyboard modifiers. | 148 // Release all keyboard modifiers. |
157 modifiers_->ResetKeyboardModifiers(); | 149 modifiers_->ResetKeyboardModifiers(); |
158 // Press modifiers for currently held keys. | 150 // Press modifiers for currently held keys. |
159 for (int key = 0; key < KEY_CNT; ++key) { | 151 for (int key = 0; key < KEY_CNT; ++key) { |
160 if (!key_state_.test(key)) | 152 if (!key_state_.test(key)) |
161 continue; | 153 continue; |
162 DomCode dom_code = | 154 DomCode dom_code = |
163 KeycodeConverter::NativeKeycodeToDomCode(EvdevCodeToNativeCode(key)); | 155 KeycodeConverter::NativeKeycodeToDomCode(EvdevCodeToNativeCode(key)); |
164 if (dom_code == DomCode::DOM_CODE_NONE) | 156 if (dom_code == DomCode::NONE) |
165 continue; | 157 continue; |
166 DomKey dom_key; | 158 DomKey dom_key; |
167 KeyboardCode keycode; | 159 KeyboardCode keycode; |
168 if (!keyboard_layout_engine_->Lookup(dom_code, EF_NONE, &dom_key, &keycode)) | 160 if (!keyboard_layout_engine_->Lookup(dom_code, EF_NONE, &dom_key, &keycode)) |
169 continue; | 161 continue; |
170 int flag = ModifierDomKeyToEventFlag(dom_key); | 162 int flag = ModifierDomKeyToEventFlag(dom_key); |
171 if (flag == EF_NONE) | 163 if (flag == EF_NONE) |
172 continue; | 164 continue; |
173 UpdateModifier(flag, true); | 165 UpdateModifier(flag, true); |
174 } | 166 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 ScheduleKeyRepeat(repeat_interval_); | 220 ScheduleKeyRepeat(repeat_interval_); |
229 } | 221 } |
230 | 222 |
231 void KeyboardEvdev::DispatchKey(unsigned int key, | 223 void KeyboardEvdev::DispatchKey(unsigned int key, |
232 bool down, | 224 bool down, |
233 bool repeat, | 225 bool repeat, |
234 base::TimeDelta timestamp, | 226 base::TimeDelta timestamp, |
235 int device_id) { | 227 int device_id) { |
236 DomCode dom_code = | 228 DomCode dom_code = |
237 KeycodeConverter::NativeKeycodeToDomCode(EvdevCodeToNativeCode(key)); | 229 KeycodeConverter::NativeKeycodeToDomCode(EvdevCodeToNativeCode(key)); |
238 if (dom_code == DomCode::DOM_CODE_NONE) | 230 if (dom_code == DomCode::NONE) |
239 return; | 231 return; |
240 int flags = modifiers_->GetModifierFlags(); | 232 int flags = modifiers_->GetModifierFlags(); |
241 DomKey dom_key; | 233 DomKey dom_key; |
242 KeyboardCode key_code; | 234 KeyboardCode key_code; |
243 if (!keyboard_layout_engine_->Lookup(dom_code, flags, &dom_key, &key_code)) | 235 if (!keyboard_layout_engine_->Lookup(dom_code, flags, &dom_key, &key_code)) |
244 return; | 236 return; |
245 if (!repeat) { | 237 if (!repeat) { |
246 int flag = ModifierDomKeyToEventFlag(dom_key); | 238 int flag = ModifierDomKeyToEventFlag(dom_key); |
247 UpdateModifier(flag, down); | 239 UpdateModifier(flag, down); |
248 } | 240 } |
249 | 241 |
250 KeyEvent event(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code, | 242 KeyEvent event(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code, |
251 modifiers_->GetModifierFlags(), dom_key, timestamp); | 243 modifiers_->GetModifierFlags(), dom_key, timestamp); |
252 event.set_source_device_id(device_id); | 244 event.set_source_device_id(device_id); |
253 callback_.Run(&event); | 245 callback_.Run(&event); |
254 } | 246 } |
255 | 247 |
256 } // namespace ui | 248 } // namespace ui |
OLD | NEW |