Chromium Code Reviews| 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 |