OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "apps/moterm/key_util.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #include "mojo/services/input_events/public/interfaces/input_events.mojom.h" |
| 9 #include "mojo/services/input_events/public/interfaces/input_key_codes.mojom.h" |
| 10 |
| 11 // TODO(vtl): Handle more stuff and verify that we're consistent about the |
| 12 // sequences we generate. |
| 13 std::string GetInputSequenceForKeyPressedEvent(const mojo::Event& key_event) { |
| 14 DCHECK_EQ(key_event.action, mojo::EVENT_TYPE_KEY_PRESSED); |
| 15 CHECK(key_event.key_data); |
| 16 const mojo::KeyData& key_data = *key_event.key_data; |
| 17 |
| 18 DVLOG(2) << "Key pressed:" |
| 19 << "\n is_char = " << key_data.is_char |
| 20 << "\n character = " << key_data.character |
| 21 << "\n windows_key_code = " << key_data.windows_key_code |
| 22 << "\n text = " << key_data.text |
| 23 << "\n unmodified_text = " << key_data.unmodified_text; |
| 24 |
| 25 // We'll only deal with character events (which we'll get even if |character| |
| 26 // isn't set). |
| 27 if (!key_data.is_char) |
| 28 return std::string(); |
| 29 |
| 30 // Use |character| if that's set. |
| 31 // TODO(vtl): Maybe we should use |text| instead, but it seems to be the same |
| 32 // as |character|. (The comments claim that |text| will have something for |
| 33 // backspace while |character| won't, but this does not appear to be true |
| 34 // currently.) |
| 35 if (key_data.character) { |
| 36 if (key_data.character >= 128) { |
| 37 // TODO(vtl): Need to UTF-8 encode. |
| 38 NOTIMPLEMENTED(); |
| 39 return std::string(); |
| 40 } |
| 41 return std::string(1, static_cast<char>(key_data.character)); |
| 42 } |
| 43 |
| 44 // TODO(vtl): For some of these, we may need to handle modifiers (from |
| 45 // |event.flags|). |
| 46 switch (key_data.windows_key_code) { |
| 47 // Produces input sequence: |
| 48 case mojo::KEYBOARD_CODE_BACK: |
| 49 // Have backspace send DEL instead of BS. |
| 50 return std::string("\x7f"); |
| 51 case mojo::KEYBOARD_CODE_ESCAPE: |
| 52 return std::string("\x1b"); |
| 53 case mojo::KEYBOARD_CODE_PRIOR: |
| 54 return std::string("\x1b[5~"); |
| 55 case mojo::KEYBOARD_CODE_NEXT: |
| 56 return std::string("\x1b[6~"); |
| 57 case mojo::KEYBOARD_CODE_END: |
| 58 return std::string("\x1b[F"); |
| 59 case mojo::KEYBOARD_CODE_HOME: |
| 60 return std::string("\x1b[H"); |
| 61 case mojo::KEYBOARD_CODE_LEFT: |
| 62 return std::string("\x1b[D"); |
| 63 case mojo::KEYBOARD_CODE_UP: |
| 64 return std::string("\x1b[A"); |
| 65 case mojo::KEYBOARD_CODE_RIGHT: |
| 66 return std::string("\x1b[C"); |
| 67 case mojo::KEYBOARD_CODE_DOWN: |
| 68 return std::string("\x1b[B"); |
| 69 case mojo::KEYBOARD_CODE_INSERT: |
| 70 return std::string("\x1b[2~"); |
| 71 case mojo::KEYBOARD_CODE_DELETE: |
| 72 return std::string("\x1b[3~"); |
| 73 |
| 74 // Should have |character| set: |
| 75 case mojo::KEYBOARD_CODE_TAB: |
| 76 case mojo::KEYBOARD_CODE_RETURN: |
| 77 case mojo::KEYBOARD_CODE_SPACE: |
| 78 case mojo::KEYBOARD_CODE_NUM_0: |
| 79 case mojo::KEYBOARD_CODE_NUM_1: |
| 80 case mojo::KEYBOARD_CODE_NUM_2: |
| 81 case mojo::KEYBOARD_CODE_NUM_3: |
| 82 case mojo::KEYBOARD_CODE_NUM_4: |
| 83 case mojo::KEYBOARD_CODE_NUM_5: |
| 84 case mojo::KEYBOARD_CODE_NUM_6: |
| 85 case mojo::KEYBOARD_CODE_NUM_7: |
| 86 case mojo::KEYBOARD_CODE_NUM_8: |
| 87 case mojo::KEYBOARD_CODE_NUM_9: |
| 88 case mojo::KEYBOARD_CODE_A: |
| 89 case mojo::KEYBOARD_CODE_B: |
| 90 case mojo::KEYBOARD_CODE_C: |
| 91 case mojo::KEYBOARD_CODE_D: |
| 92 case mojo::KEYBOARD_CODE_E: |
| 93 case mojo::KEYBOARD_CODE_F: |
| 94 case mojo::KEYBOARD_CODE_G: |
| 95 case mojo::KEYBOARD_CODE_H: |
| 96 case mojo::KEYBOARD_CODE_I: |
| 97 case mojo::KEYBOARD_CODE_J: |
| 98 case mojo::KEYBOARD_CODE_K: |
| 99 case mojo::KEYBOARD_CODE_L: |
| 100 case mojo::KEYBOARD_CODE_M: |
| 101 case mojo::KEYBOARD_CODE_N: |
| 102 case mojo::KEYBOARD_CODE_O: |
| 103 case mojo::KEYBOARD_CODE_P: |
| 104 case mojo::KEYBOARD_CODE_Q: |
| 105 case mojo::KEYBOARD_CODE_R: |
| 106 case mojo::KEYBOARD_CODE_S: |
| 107 case mojo::KEYBOARD_CODE_T: |
| 108 case mojo::KEYBOARD_CODE_U: |
| 109 case mojo::KEYBOARD_CODE_V: |
| 110 case mojo::KEYBOARD_CODE_W: |
| 111 case mojo::KEYBOARD_CODE_X: |
| 112 case mojo::KEYBOARD_CODE_Y: |
| 113 case mojo::KEYBOARD_CODE_Z: |
| 114 // TODO(vtl): Actually, we won't get characters for Ctrl+<number> (and |
| 115 // probably other odd combinations). |
| 116 DLOG(WARNING) << "Expected character for key code " |
| 117 << key_data.windows_key_code; |
| 118 break; |
| 119 |
| 120 // Purposely produce no input sequence: |
| 121 case mojo::KEYBOARD_CODE_SHIFT: |
| 122 case mojo::KEYBOARD_CODE_CONTROL: |
| 123 case mojo::KEYBOARD_CODE_LSHIFT: |
| 124 case mojo::KEYBOARD_CODE_RSHIFT: |
| 125 case mojo::KEYBOARD_CODE_LCONTROL: |
| 126 case mojo::KEYBOARD_CODE_RCONTROL: |
| 127 break; |
| 128 |
| 129 // TODO(vtl): Figure these out. |
| 130 case mojo::KEYBOARD_CODE_CLEAR: |
| 131 case mojo::KEYBOARD_CODE_MENU: |
| 132 case mojo::KEYBOARD_CODE_PAUSE: |
| 133 case mojo::KEYBOARD_CODE_CAPITAL: |
| 134 case mojo::KEYBOARD_CODE_KANA: // A.k.a. |KEYBOARD_CODE_HANGUL|. |
| 135 case mojo::KEYBOARD_CODE_JUNJA: |
| 136 case mojo::KEYBOARD_CODE_FINAL: |
| 137 case mojo::KEYBOARD_CODE_HANJA: // A.k.a. |KEYBOARD_CODE_KANJI|. |
| 138 case mojo::KEYBOARD_CODE_CONVERT: |
| 139 case mojo::KEYBOARD_CODE_NONCONVERT: |
| 140 case mojo::KEYBOARD_CODE_ACCEPT: |
| 141 case mojo::KEYBOARD_CODE_MODECHANGE: |
| 142 case mojo::KEYBOARD_CODE_SELECT: |
| 143 case mojo::KEYBOARD_CODE_PRINT: |
| 144 case mojo::KEYBOARD_CODE_EXECUTE: |
| 145 case mojo::KEYBOARD_CODE_SNAPSHOT: |
| 146 case mojo::KEYBOARD_CODE_HELP: |
| 147 case mojo::KEYBOARD_CODE_LWIN: // A.k.a. |KEYBOARD_CODE_COMMAND|. |
| 148 case mojo::KEYBOARD_CODE_RWIN: |
| 149 case mojo::KEYBOARD_CODE_APPS: |
| 150 case mojo::KEYBOARD_CODE_SLEEP: |
| 151 case mojo::KEYBOARD_CODE_NUMPAD0: |
| 152 case mojo::KEYBOARD_CODE_NUMPAD1: |
| 153 case mojo::KEYBOARD_CODE_NUMPAD2: |
| 154 case mojo::KEYBOARD_CODE_NUMPAD3: |
| 155 case mojo::KEYBOARD_CODE_NUMPAD4: |
| 156 case mojo::KEYBOARD_CODE_NUMPAD5: |
| 157 case mojo::KEYBOARD_CODE_NUMPAD6: |
| 158 case mojo::KEYBOARD_CODE_NUMPAD7: |
| 159 case mojo::KEYBOARD_CODE_NUMPAD8: |
| 160 case mojo::KEYBOARD_CODE_NUMPAD9: |
| 161 case mojo::KEYBOARD_CODE_MULTIPLY: |
| 162 case mojo::KEYBOARD_CODE_ADD: |
| 163 case mojo::KEYBOARD_CODE_SEPARATOR: |
| 164 case mojo::KEYBOARD_CODE_SUBTRACT: |
| 165 case mojo::KEYBOARD_CODE_DECIMAL: |
| 166 case mojo::KEYBOARD_CODE_DIVIDE: |
| 167 case mojo::KEYBOARD_CODE_F1: |
| 168 case mojo::KEYBOARD_CODE_F2: |
| 169 case mojo::KEYBOARD_CODE_F3: |
| 170 case mojo::KEYBOARD_CODE_F4: |
| 171 case mojo::KEYBOARD_CODE_F5: |
| 172 case mojo::KEYBOARD_CODE_F6: |
| 173 case mojo::KEYBOARD_CODE_F7: |
| 174 case mojo::KEYBOARD_CODE_F8: |
| 175 case mojo::KEYBOARD_CODE_F9: |
| 176 case mojo::KEYBOARD_CODE_F10: |
| 177 case mojo::KEYBOARD_CODE_F11: |
| 178 case mojo::KEYBOARD_CODE_F12: |
| 179 case mojo::KEYBOARD_CODE_F13: |
| 180 case mojo::KEYBOARD_CODE_F14: |
| 181 case mojo::KEYBOARD_CODE_F15: |
| 182 case mojo::KEYBOARD_CODE_F16: |
| 183 case mojo::KEYBOARD_CODE_F17: |
| 184 case mojo::KEYBOARD_CODE_F18: |
| 185 case mojo::KEYBOARD_CODE_F19: |
| 186 case mojo::KEYBOARD_CODE_F20: |
| 187 case mojo::KEYBOARD_CODE_F21: |
| 188 case mojo::KEYBOARD_CODE_F22: |
| 189 case mojo::KEYBOARD_CODE_F23: |
| 190 case mojo::KEYBOARD_CODE_F24: |
| 191 case mojo::KEYBOARD_CODE_NUMLOCK: |
| 192 case mojo::KEYBOARD_CODE_SCROLL: |
| 193 case mojo::KEYBOARD_CODE_LMENU: |
| 194 case mojo::KEYBOARD_CODE_RMENU: |
| 195 case mojo::KEYBOARD_CODE_BROWSER_BACK: |
| 196 case mojo::KEYBOARD_CODE_BROWSER_FORWARD: |
| 197 case mojo::KEYBOARD_CODE_BROWSER_REFRESH: |
| 198 case mojo::KEYBOARD_CODE_BROWSER_STOP: |
| 199 case mojo::KEYBOARD_CODE_BROWSER_SEARCH: |
| 200 case mojo::KEYBOARD_CODE_BROWSER_FAVORITES: |
| 201 case mojo::KEYBOARD_CODE_BROWSER_HOME: |
| 202 case mojo::KEYBOARD_CODE_VOLUME_MUTE: |
| 203 case mojo::KEYBOARD_CODE_VOLUME_DOWN: |
| 204 case mojo::KEYBOARD_CODE_VOLUME_UP: |
| 205 case mojo::KEYBOARD_CODE_MEDIA_NEXT_TRACK: |
| 206 case mojo::KEYBOARD_CODE_MEDIA_PREV_TRACK: |
| 207 case mojo::KEYBOARD_CODE_MEDIA_STOP: |
| 208 case mojo::KEYBOARD_CODE_MEDIA_PLAY_PAUSE: |
| 209 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_MAIL: |
| 210 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_MEDIA_SELECT: |
| 211 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_APP1: |
| 212 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_APP2: |
| 213 case mojo::KEYBOARD_CODE_OEM_1: |
| 214 case mojo::KEYBOARD_CODE_OEM_PLUS: |
| 215 case mojo::KEYBOARD_CODE_OEM_COMMA: |
| 216 case mojo::KEYBOARD_CODE_OEM_MINUS: |
| 217 case mojo::KEYBOARD_CODE_OEM_PERIOD: |
| 218 case mojo::KEYBOARD_CODE_OEM_2: |
| 219 case mojo::KEYBOARD_CODE_OEM_3: |
| 220 case mojo::KEYBOARD_CODE_OEM_4: |
| 221 case mojo::KEYBOARD_CODE_OEM_5: |
| 222 case mojo::KEYBOARD_CODE_OEM_6: |
| 223 case mojo::KEYBOARD_CODE_OEM_7: |
| 224 case mojo::KEYBOARD_CODE_OEM_8: |
| 225 case mojo::KEYBOARD_CODE_OEM_102: |
| 226 case mojo::KEYBOARD_CODE_PROCESSKEY: |
| 227 case mojo::KEYBOARD_CODE_PACKET: |
| 228 case mojo::KEYBOARD_CODE_DBE_SBCSCHAR: |
| 229 case mojo::KEYBOARD_CODE_DBE_DBCSCHAR: |
| 230 case mojo::KEYBOARD_CODE_ATTN: |
| 231 case mojo::KEYBOARD_CODE_CRSEL: |
| 232 case mojo::KEYBOARD_CODE_EXSEL: |
| 233 case mojo::KEYBOARD_CODE_EREOF: |
| 234 case mojo::KEYBOARD_CODE_PLAY: |
| 235 case mojo::KEYBOARD_CODE_ZOOM: |
| 236 case mojo::KEYBOARD_CODE_NONAME: |
| 237 case mojo::KEYBOARD_CODE_PA1: |
| 238 case mojo::KEYBOARD_CODE_OEM_CLEAR: |
| 239 case mojo::KEYBOARD_CODE_UNKNOWN: |
| 240 case mojo::KEYBOARD_CODE_ALTGR: |
| 241 NOTIMPLEMENTED() << "Key code " << key_data.windows_key_code; |
| 242 break; |
| 243 |
| 244 default: |
| 245 LOG(WARNING) << "Unknown key code " << key_data.windows_key_code; |
| 246 break; |
| 247 } |
| 248 return std::string(); |
| 249 } |
OLD | NEW |