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 "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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |