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

Side by Side Diff: content/browser/renderer_host/input/web_input_event_builders_mac.mm

Issue 2120153003: Remove keyIdentifier. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remove_key_identifier_3a
Patch Set: Rebase Created 4 years, 5 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 2015 The Chromium Authors. All rights reserved. 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 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 /* 5 /*
6 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
7 * Copyright (C) 2006-2009 Google Inc. 7 * Copyright (C) 2006-2009 Google Inc.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 return @""; 143 return @"";
144 return FilterSpecialCharacter([event characters]); 144 return FilterSpecialCharacter([event characters]);
145 } 145 }
146 146
147 inline NSString* UnmodifiedTextFromEvent(NSEvent* event) { 147 inline NSString* UnmodifiedTextFromEvent(NSEvent* event) {
148 if ([event type] == NSFlagsChanged) 148 if ([event type] == NSFlagsChanged)
149 return @""; 149 return @"";
150 return FilterSpecialCharacter([event charactersIgnoringModifiers]); 150 return FilterSpecialCharacter([event charactersIgnoringModifiers]);
151 } 151 }
152 152
153 NSString* KeyIdentifierForKeyEvent(NSEvent* event) {
154 if ([event type] == NSFlagsChanged) {
155 switch ([event keyCode]) {
156 case 54: // Right Command
157 case 55: // Left Command
158 return @"Meta";
159
160 case 57: // Capslock
161 return @"CapsLock";
162
163 case 56: // Left Shift
164 case 60: // Right Shift
165 return @"Shift";
166
167 case 58: // Left Alt
168 case 61: // Right Alt
169 return @"Alt";
170
171 case 59: // Left Ctrl
172 case 62: // Right Ctrl
173 return @"Control";
174
175 // Begin non-Apple addition/modification
176 // --------------------------------------
177 case 63: // Function
178 return @"Function";
179
180 default: // Unknown, but this may be a strange/new keyboard.
181 return @"Unidentified";
182 // End non-Apple addition/modification
183 // ----------------------------------------
184 }
185 }
186
187 NSString* s = [event charactersIgnoringModifiers];
188 if ([s length] != 1)
189 return @"Unidentified";
190
191 unichar c = [s characterAtIndex:0];
192 switch (c) {
193 // Each identifier listed in the DOM spec is listed here.
194 // Many are simply commented out since they do not appear on standard
195 // Macintosh keyboards
196 // or are on a key that doesn't have a corresponding character.
197
198 // "Accept"
199 // "AllCandidates"
200
201 // "Alt"
202 case NSMenuFunctionKey:
203 return @"Alt";
204
205 // "Apps"
206 // "BrowserBack"
207 // "BrowserForward"
208 // "BrowserHome"
209 // "BrowserRefresh"
210 // "BrowserSearch"
211 // "BrowserStop"
212 // "CapsLock"
213
214 // "Clear"
215 case NSClearLineFunctionKey:
216 return @"Clear";
217
218 // "CodeInput"
219 // "Compose"
220 // "Control"
221 // "Crsel"
222 // "Convert"
223 // "Copy"
224 // "Cut"
225
226 // "Down"
227 case NSDownArrowFunctionKey:
228 return @"Down";
229 // "End"
230 case NSEndFunctionKey:
231 return @"End";
232 // "Enter"
233 case 0x3:
234 case 0xA:
235 case 0xD: // Macintosh calls the one on the main keyboard Return, but
236 // Windows calls it Enter, so we'll do the same for the DOM
237 return @"Enter";
238
239 // "EraseEof"
240
241 // "Execute"
242 case NSExecuteFunctionKey:
243 return @"Execute";
244
245 // "Exsel"
246
247 // "F1"
248 case NSF1FunctionKey:
249 return @"F1";
250 // "F2"
251 case NSF2FunctionKey:
252 return @"F2";
253 // "F3"
254 case NSF3FunctionKey:
255 return @"F3";
256 // "F4"
257 case NSF4FunctionKey:
258 return @"F4";
259 // "F5"
260 case NSF5FunctionKey:
261 return @"F5";
262 // "F6"
263 case NSF6FunctionKey:
264 return @"F6";
265 // "F7"
266 case NSF7FunctionKey:
267 return @"F7";
268 // "F8"
269 case NSF8FunctionKey:
270 return @"F8";
271 // "F9"
272 case NSF9FunctionKey:
273 return @"F9";
274 // "F10"
275 case NSF10FunctionKey:
276 return @"F10";
277 // "F11"
278 case NSF11FunctionKey:
279 return @"F11";
280 // "F12"
281 case NSF12FunctionKey:
282 return @"F12";
283 // "F13"
284 case NSF13FunctionKey:
285 return @"F13";
286 // "F14"
287 case NSF14FunctionKey:
288 return @"F14";
289 // "F15"
290 case NSF15FunctionKey:
291 return @"F15";
292 // "F16"
293 case NSF16FunctionKey:
294 return @"F16";
295 // "F17"
296 case NSF17FunctionKey:
297 return @"F17";
298 // "F18"
299 case NSF18FunctionKey:
300 return @"F18";
301 // "F19"
302 case NSF19FunctionKey:
303 return @"F19";
304 // "F20"
305 case NSF20FunctionKey:
306 return @"F20";
307 // "F21"
308 case NSF21FunctionKey:
309 return @"F21";
310 // "F22"
311 case NSF22FunctionKey:
312 return @"F22";
313 // "F23"
314 case NSF23FunctionKey:
315 return @"F23";
316 // "F24"
317 case NSF24FunctionKey:
318 return @"F24";
319
320 // "FinalMode"
321
322 // "Find"
323 case NSFindFunctionKey:
324 return @"Find";
325
326 // "FullWidth"
327 // "HalfWidth"
328 // "HangulMode"
329 // "HanjaMode"
330
331 // "Help"
332 case NSHelpFunctionKey:
333 return @"Help";
334
335 // "Hiragana"
336
337 // "Home"
338 case NSHomeFunctionKey:
339 return @"Home";
340 // "Insert"
341 case NSInsertFunctionKey:
342 return @"Insert";
343
344 // "JapaneseHiragana"
345 // "JapaneseKatakana"
346 // "JapaneseRomaji"
347 // "JunjaMode"
348 // "KanaMode"
349 // "KanjiMode"
350 // "Katakana"
351 // "LaunchApplication1"
352 // "LaunchApplication2"
353 // "LaunchMail"
354
355 // "Left"
356 case NSLeftArrowFunctionKey:
357 return @"Left";
358
359 // "Meta"
360 // "MediaNextTrack"
361 // "MediaPlayPause"
362 // "MediaPreviousTrack"
363 // "MediaStop"
364
365 // "ModeChange"
366 case NSModeSwitchFunctionKey:
367 return @"ModeChange";
368
369 // "Nonconvert"
370 // "NumLock"
371
372 // "PageDown"
373 case NSPageDownFunctionKey:
374 return @"PageDown";
375 // "PageUp"
376 case NSPageUpFunctionKey:
377 return @"PageUp";
378
379 // "Paste"
380
381 // "Pause"
382 case NSPauseFunctionKey:
383 return @"Pause";
384
385 // "Play"
386 // "PreviousCandidate"
387
388 // "PrintScreen"
389 case NSPrintScreenFunctionKey:
390 return @"PrintScreen";
391
392 // "Process"
393 // "Props"
394
395 // "Right"
396 case NSRightArrowFunctionKey:
397 return @"Right";
398
399 // "RomanCharacters"
400
401 // "Scroll"
402 case NSScrollLockFunctionKey:
403 return @"Scroll";
404 // "Select"
405 case NSSelectFunctionKey:
406 return @"Select";
407
408 // "SelectMedia"
409 // "Shift"
410
411 // "Stop"
412 case NSStopFunctionKey:
413 return @"Stop";
414 // "Up"
415 case NSUpArrowFunctionKey:
416 return @"Up";
417 // "Undo"
418 case NSUndoFunctionKey:
419 return @"Undo";
420
421 // "VolumeDown"
422 // "VolumeMute"
423 // "VolumeUp"
424 // "Win"
425 // "Zoom"
426
427 // More function keys, not in the key identifier specification.
428 case NSF25FunctionKey:
429 return @"F25";
430 case NSF26FunctionKey:
431 return @"F26";
432 case NSF27FunctionKey:
433 return @"F27";
434 case NSF28FunctionKey:
435 return @"F28";
436 case NSF29FunctionKey:
437 return @"F29";
438 case NSF30FunctionKey:
439 return @"F30";
440 case NSF31FunctionKey:
441 return @"F31";
442 case NSF32FunctionKey:
443 return @"F32";
444 case NSF33FunctionKey:
445 return @"F33";
446 case NSF34FunctionKey:
447 return @"F34";
448 case NSF35FunctionKey:
449 return @"F35";
450
451 // Turn 0x7F into 0x08, because backspace needs to always be 0x08.
452 case 0x7F:
453 return @"U+0008";
454 // Standard says that DEL becomes U+007F.
455 case NSDeleteFunctionKey:
456 return @"U+007F";
457
458 // Always use 0x09 for tab instead of AppKit's backtab character.
459 case NSBackTabCharacter:
460 return @"U+0009";
461
462 case NSBeginFunctionKey:
463 case NSBreakFunctionKey:
464 case NSClearDisplayFunctionKey:
465 case NSDeleteCharFunctionKey:
466 case NSDeleteLineFunctionKey:
467 case NSInsertCharFunctionKey:
468 case NSInsertLineFunctionKey:
469 case NSNextFunctionKey:
470 case NSPrevFunctionKey:
471 case NSPrintFunctionKey:
472 case NSRedoFunctionKey:
473 case NSResetFunctionKey:
474 case NSSysReqFunctionKey:
475 case NSSystemFunctionKey:
476 case NSUserFunctionKey:
477 // FIXME: We should use something other than the vendor-area Unicode values
478 // for the above keys.
479 // For now, just fall through to the default.
480 default:
481 return [NSString stringWithFormat:@"U+%04X", base::ToUpperASCII(c)];
482 }
483 }
484
485 // End Apple code. 153 // End Apple code.
486 // ---------------------------------------------------------------------------- 154 // ----------------------------------------------------------------------------
487 155
488 int ModifiersFromEvent(NSEvent* event) { 156 int ModifiersFromEvent(NSEvent* event) {
489 int modifiers = 0; 157 int modifiers = 0;
490 158
491 if ([event modifierFlags] & NSControlKeyMask) 159 if ([event modifierFlags] & NSControlKeyMask)
492 modifiers |= blink::WebInputEvent::ControlKey; 160 modifiers |= blink::WebInputEvent::ControlKey;
493 if ([event modifierFlags] & NSShiftKeyMask) 161 if ([event modifierFlags] & NSShiftKeyMask)
494 modifiers |= blink::WebInputEvent::ShiftKey; 162 modifiers |= blink::WebInputEvent::ShiftKey;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 285
618 ui::DomCode dom_code = ui::DomCodeFromNSEvent(event); 286 ui::DomCode dom_code = ui::DomCodeFromNSEvent(event);
619 result.windowsKeyCode = 287 result.windowsKeyCode =
620 ui::LocatedToNonLocatedKeyboardCode(ui::KeyboardCodeFromNSEvent(event)); 288 ui::LocatedToNonLocatedKeyboardCode(ui::KeyboardCodeFromNSEvent(event));
621 result.modifiers |= DomCodeToWebInputEventModifiers(dom_code); 289 result.modifiers |= DomCodeToWebInputEventModifiers(dom_code);
622 result.nativeKeyCode = [event keyCode]; 290 result.nativeKeyCode = [event keyCode];
623 result.domCode = static_cast<int>(dom_code); 291 result.domCode = static_cast<int>(dom_code);
624 result.domKey = DomKeyFromEvent(event); 292 result.domKey = DomKeyFromEvent(event);
625 NSString* text_str = TextFromEvent(event); 293 NSString* text_str = TextFromEvent(event);
626 NSString* unmodified_str = UnmodifiedTextFromEvent(event); 294 NSString* unmodified_str = UnmodifiedTextFromEvent(event);
627 NSString* identifier_str = KeyIdentifierForKeyEvent(event);
628 295
629 // Begin Apple code, copied from KeyEventMac.mm 296 // Begin Apple code, copied from KeyEventMac.mm
630 297
631 // Always use 13 for Enter/Return -- we don't want to use AppKit's 298 // Always use 13 for Enter/Return -- we don't want to use AppKit's
632 // different character for Enter. 299 // different character for Enter.
633 if (result.windowsKeyCode == '\r') { 300 if (result.windowsKeyCode == '\r') {
634 text_str = @"\r"; 301 text_str = @"\r";
635 unmodified_str = @"\r"; 302 unmodified_str = @"\r";
636 } 303 }
637 304
638 // Always use 9 for tab -- we don't want to use AppKit's different character 305 // Always use 9 for tab -- we don't want to use AppKit's different character
639 // for shift-tab. 306 // for shift-tab.
640 if (result.windowsKeyCode == 9) { 307 if (result.windowsKeyCode == 9) {
641 text_str = @"\x9"; 308 text_str = @"\x9";
642 unmodified_str = @"\x9"; 309 unmodified_str = @"\x9";
643 } 310 }
644 311
645 // End Apple code. 312 // End Apple code.
646 313
647 if ([text_str length] < blink::WebKeyboardEvent::textLengthCap && 314 if ([text_str length] < blink::WebKeyboardEvent::textLengthCap &&
648 [unmodified_str length] < blink::WebKeyboardEvent::textLengthCap) { 315 [unmodified_str length] < blink::WebKeyboardEvent::textLengthCap) {
649 [text_str getCharacters:&result.text[0]]; 316 [text_str getCharacters:&result.text[0]];
650 [unmodified_str getCharacters:&result.unmodifiedText[0]]; 317 [unmodified_str getCharacters:&result.unmodifiedText[0]];
651 } else 318 } else
652 NOTIMPLEMENTED(); 319 NOTIMPLEMENTED();
653 320
654 [identifier_str getCString:&result.keyIdentifier[0]
655 maxLength:sizeof(result.keyIdentifier)
656 encoding:NSASCIIStringEncoding];
657
658 result.timeStampSeconds = [event timestamp]; 321 result.timeStampSeconds = [event timestamp];
659 result.isSystemKey = IsSystemKeyEvent(result); 322 result.isSystemKey = IsSystemKeyEvent(result);
660 323
661 return result; 324 return result;
662 } 325 }
663 326
664 // WebMouseEvent -------------------------------------------------------------- 327 // WebMouseEvent --------------------------------------------------------------
665 328
666 blink::WebMouseEvent WebMouseEventBuilder::Build(NSEvent* event, NSView* view) { 329 blink::WebMouseEvent WebMouseEventBuilder::Build(NSEvent* event, NSView* view) {
667 blink::WebMouseEvent result; 330 blink::WebMouseEvent result;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 break; 614 break;
952 default: 615 default:
953 NOTIMPLEMENTED(); 616 NOTIMPLEMENTED();
954 result.type = blink::WebInputEvent::Undefined; 617 result.type = blink::WebInputEvent::Undefined;
955 } 618 }
956 619
957 return result; 620 return result;
958 } 621 }
959 622
960 } // namespace content 623 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698