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

Side by Side Diff: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc

Issue 1566463002: Generate located Windows keycodes for number pad keys under Ozone (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
« no previous file with comments | « no previous file | ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/layout/xkb/xkb_keyboard_layout_engine.h" 5 #include "ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <xkbcommon/xkbcommon-names.h> 8 #include <xkbcommon/xkbcommon-names.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 13 matching lines...) Expand all
24 #include "ui/events/keycodes/keyboard_code_conversion_xkb.h" 24 #include "ui/events/keycodes/keyboard_code_conversion_xkb.h"
25 25
26 namespace ui { 26 namespace ui {
27 27
28 namespace { 28 namespace {
29 29
30 typedef base::Callback<void(const std::string&, 30 typedef base::Callback<void(const std::string&,
31 scoped_ptr<char, base::FreeDeleter>)> 31 scoped_ptr<char, base::FreeDeleter>)>
32 LoadKeymapCallback; 32 LoadKeymapCallback;
33 33
34 KeyboardCode AlphanumericKeyboardCode(base::char16 character) { 34 KeyboardCode AlphanumericKeyboardCode(xkb_keysym_t xkb_keysym,
35 base::char16 character) {
35 // Plain ASCII letters and digits map directly to VKEY values. 36 // Plain ASCII letters and digits map directly to VKEY values.
36 if ((character >= '0') && (character <= '9')) 37 if ((character >= '0') && (character <= '9')) {
37 return static_cast<KeyboardCode>(VKEY_0 + character - '0'); 38 int zero = ((xkb_keysym >= XKB_KEY_KP_0) && (xkb_keysym <= XKB_KEY_KP_9))
39 ? VKEY_NUMPAD0
40 : VKEY_0;
41 return static_cast<KeyboardCode>(zero + character - '0');
42 }
38 if ((character >= 'a') && (character <= 'z')) 43 if ((character >= 'a') && (character <= 'z'))
39 return static_cast<KeyboardCode>(VKEY_A + character - 'a'); 44 return static_cast<KeyboardCode>(VKEY_A + character - 'a');
40 if ((character >= 'A') && (character <= 'Z')) 45 if ((character >= 'A') && (character <= 'Z'))
41 return static_cast<KeyboardCode>(VKEY_A + character - 'A'); 46 return static_cast<KeyboardCode>(VKEY_A + character - 'A');
42 return VKEY_UNKNOWN; 47 return VKEY_UNKNOWN;
43 } 48 }
44 49
45 // These tables map layout-dependent printable characters/codes 50 // These tables map layout-dependent printable characters/codes
46 // to legacy Windows-based VKEY values. 51 // to legacy Windows-based VKEY values.
47 // 52 //
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 &normal_character) && 773 &normal_character) &&
769 !IsControlCharacter(normal_character)) { 774 !IsControlCharacter(normal_character)) {
770 flags = normal_ui_flags; 775 flags = normal_ui_flags;
771 xkb_flags = normal_xkb_flags; 776 xkb_flags = normal_xkb_flags;
772 character = normal_character; 777 character = normal_character;
773 xkb_keysym = normal_keysym; 778 xkb_keysym = normal_keysym;
774 } 779 }
775 } 780 }
776 781
777 *dom_key = DomKey::FromCharacter(character); 782 *dom_key = DomKey::FromCharacter(character);
778 *key_code = AlphanumericKeyboardCode(character); 783 *key_code = AlphanumericKeyboardCode(xkb_keysym, character);
779 if (*key_code == VKEY_UNKNOWN) { 784 if (*key_code == VKEY_UNKNOWN) {
780 *key_code = DifficultKeyboardCode(dom_code, flags, xkb_keycode, xkb_flags, 785 *key_code = DifficultKeyboardCode(dom_code, flags, xkb_keycode, xkb_flags,
781 xkb_keysym, character); 786 xkb_keysym, character);
782 if (*key_code == VKEY_UNKNOWN) 787 if (*key_code == VKEY_UNKNOWN)
783 *key_code = DomCodeToUsLayoutNonLocatedKeyboardCode(dom_code); 788 *key_code = DomCodeToUsLayoutNonLocatedKeyboardCode(dom_code);
784 } 789 }
785 return true; 790 return true;
786 } 791 }
787 792
788 void XkbKeyboardLayoutEngine::SetKeymapFromStringForTest( 793 void XkbKeyboardLayoutEngine::SetKeymapFromStringForTest(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 uint32_t plain_character; 874 uint32_t plain_character;
870 if (!XkbLookup(xkb_keycode, 0, &plain_keysym, &plain_character)) 875 if (!XkbLookup(xkb_keycode, 0, &plain_keysym, &plain_character))
871 return VKEY_UNKNOWN; 876 return VKEY_UNKNOWN;
872 877
873 // If the plain key is non-printable, that determines the VKEY. 878 // If the plain key is non-printable, that determines the VKEY.
874 DomKey plain_key = NonPrintableXKeySymToDomKey(plain_keysym); 879 DomKey plain_key = NonPrintableXKeySymToDomKey(plain_keysym);
875 if (plain_key != ui::DomKey::NONE) 880 if (plain_key != ui::DomKey::NONE)
876 return NonPrintableDomKeyToKeyboardCode(plain_key); 881 return NonPrintableDomKeyToKeyboardCode(plain_key);
877 882
878 // Plain ASCII letters and digits map directly to VKEY values. 883 // Plain ASCII letters and digits map directly to VKEY values.
879 KeyboardCode key_code = AlphanumericKeyboardCode(plain_character); 884 KeyboardCode key_code = AlphanumericKeyboardCode(xkb_keysym, plain_character);
880 if (key_code != VKEY_UNKNOWN) 885 if (key_code != VKEY_UNKNOWN)
881 return key_code; 886 return key_code;
882 887
883 // Check the multi-character tables. 888 // Check the multi-character tables.
884 const PrintableMultiEntry* multi_end = kMultiMap + arraysize(kMultiMap); 889 const PrintableMultiEntry* multi_end = kMultiMap + arraysize(kMultiMap);
885 const PrintableMultiEntry* multi = 890 const PrintableMultiEntry* multi =
886 std::lower_bound(kMultiMap, multi_end, plain_character, 891 std::lower_bound(kMultiMap, multi_end, plain_character,
887 [](const PrintableMultiEntry& e, base::char16 c) { 892 [](const PrintableMultiEntry& e, base::char16 c) {
888 return e.plain_character < c; 893 return e.plain_character < c;
889 }); 894 });
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 close_index = layout_name.size(); 961 close_index = layout_name.size();
957 *layout_variant = layout_name.substr(parentheses_index + 1, 962 *layout_variant = layout_name.substr(parentheses_index + 1,
958 close_index - parentheses_index - 1); 963 close_index - parentheses_index - 1);
959 } else if (dash_index != std::string::npos) { 964 } else if (dash_index != std::string::npos) {
960 *layout_id = layout_name.substr(0, dash_index); 965 *layout_id = layout_name.substr(0, dash_index);
961 *layout_variant = layout_name.substr(dash_index + 1); 966 *layout_variant = layout_name.substr(dash_index + 1);
962 } 967 }
963 } 968 }
964 969
965 } // namespace ui 970 } // namespace ui
OLDNEW
« no previous file with comments | « no previous file | ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698