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

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

Issue 834373002: ozone: xkb: Fix number pad key mappings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 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 | « ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h ('k') | no next file » | 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 <xkbcommon/xkbcommon-names.h> 7 #include <xkbcommon/xkbcommon-names.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "ui/events/event_constants.h" 10 #include "ui/events/event_constants.h"
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 } // anonymous namespace 619 } // anonymous namespace
620 620
621 XkbKeyCodeConverter::XkbKeyCodeConverter() { 621 XkbKeyCodeConverter::XkbKeyCodeConverter() {
622 } 622 }
623 623
624 XkbKeyCodeConverter::~XkbKeyCodeConverter() { 624 XkbKeyCodeConverter::~XkbKeyCodeConverter() {
625 } 625 }
626 626
627 XkbKeyboardLayoutEngine::XkbKeyboardLayoutEngine( 627 XkbKeyboardLayoutEngine::XkbKeyboardLayoutEngine(
628 const XkbKeyCodeConverter& converter) 628 const XkbKeyCodeConverter& converter)
629 : key_code_converter_(converter) { 629 : num_lock_mod_mask_(0),
630 key_code_converter_(converter) {
630 // TODO: add XKB_CONTEXT_NO_ENVIRONMENT_NAMES 631 // TODO: add XKB_CONTEXT_NO_ENVIRONMENT_NAMES
631 xkb_context_.reset(xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES)); 632 xkb_context_.reset(xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES));
632 xkb_context_include_path_append(xkb_context_.get(), 633 xkb_context_include_path_append(xkb_context_.get(),
633 "/usr/share/X11/xkb"); 634 "/usr/share/X11/xkb");
634 } 635 }
635 636
636 XkbKeyboardLayoutEngine::~XkbKeyboardLayoutEngine() { 637 XkbKeyboardLayoutEngine::~XkbKeyboardLayoutEngine() {
637 } 638 }
638 639
639 bool XkbKeyboardLayoutEngine::CanSetCurrentLayout() const { 640 bool XkbKeyboardLayoutEngine::CanSetCurrentLayout() const {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 xkb_state_.reset(xkb_state_new(keymap)); 743 xkb_state_.reset(xkb_state_new(keymap));
743 // Update flag map. 744 // Update flag map.
744 static const struct { 745 static const struct {
745 int ui_flag; 746 int ui_flag;
746 const char* xkb_name; 747 const char* xkb_name;
747 } flags[] = {{ui::EF_CONTROL_DOWN, XKB_MOD_NAME_CTRL}, 748 } flags[] = {{ui::EF_CONTROL_DOWN, XKB_MOD_NAME_CTRL},
748 {ui::EF_SHIFT_DOWN, XKB_MOD_NAME_SHIFT}, 749 {ui::EF_SHIFT_DOWN, XKB_MOD_NAME_SHIFT},
749 {ui::EF_ALT_DOWN, XKB_MOD_NAME_ALT}, 750 {ui::EF_ALT_DOWN, XKB_MOD_NAME_ALT},
750 {ui::EF_CAPS_LOCK_DOWN, XKB_MOD_NAME_CAPS}, 751 {ui::EF_CAPS_LOCK_DOWN, XKB_MOD_NAME_CAPS},
751 {ui::EF_COMMAND_DOWN, XKB_MOD_NAME_LOGO}, 752 {ui::EF_COMMAND_DOWN, XKB_MOD_NAME_LOGO},
752 {ui::EF_NUMPAD_KEY, XKB_MOD_NAME_NUM},
753 {ui::EF_MOD3_DOWN, "Mod3"}, 753 {ui::EF_MOD3_DOWN, "Mod3"},
754 {ui::EF_ALTGR_DOWN, "Mod5"}}; 754 {ui::EF_ALTGR_DOWN, "Mod5"}};
755 xkb_flag_map_.clear(); 755 xkb_flag_map_.clear();
756 xkb_flag_map_.resize(arraysize(flags)); 756 xkb_flag_map_.resize(arraysize(flags));
757 for (size_t i = 0; i < arraysize(flags); ++i) { 757 for (size_t i = 0; i < arraysize(flags); ++i) {
758 xkb_mod_index_t index = xkb_keymap_mod_get_index(keymap, flags[i].xkb_name); 758 xkb_mod_index_t index = xkb_keymap_mod_get_index(keymap, flags[i].xkb_name);
759 if (index == XKB_MOD_INVALID) { 759 if (index == XKB_MOD_INVALID) {
760 DVLOG(3) << "XKB keyboard layout does not contain " << flags[i].xkb_name; 760 DVLOG(3) << "XKB keyboard layout does not contain " << flags[i].xkb_name;
761 } else { 761 } else {
762 xkb_mod_mask_t flag = static_cast<xkb_mod_mask_t>(1) << index; 762 xkb_mod_mask_t flag = static_cast<xkb_mod_mask_t>(1) << index;
763 XkbFlagMapEntry e = {flags[i].ui_flag, flag}; 763 XkbFlagMapEntry e = {flags[i].ui_flag, flag};
764 xkb_flag_map_.push_back(e); 764 xkb_flag_map_.push_back(e);
765 } 765 }
766 } 766 }
767
768 // Update num lock mask.
769 num_lock_mod_mask_ = 0;
770 xkb_mod_index_t num_mod_index =
771 xkb_keymap_mod_get_index(keymap, XKB_MOD_NAME_NUM);
772 if (num_mod_index != XKB_MOD_INVALID)
773 num_lock_mod_mask_ = static_cast<xkb_mod_mask_t>(1) << num_mod_index;
767 } 774 }
768 775
769 xkb_mod_mask_t XkbKeyboardLayoutEngine::EventFlagsToXkbFlags( 776 xkb_mod_mask_t XkbKeyboardLayoutEngine::EventFlagsToXkbFlags(
770 int ui_flags) const { 777 int ui_flags) const {
771 xkb_mod_mask_t xkb_flags = 0; 778 xkb_mod_mask_t xkb_flags = 0;
772 for (const auto& entry : xkb_flag_map_) { 779 for (const auto& entry : xkb_flag_map_) {
773 if (ui_flags & entry.ui_flag) 780 if (ui_flags & entry.ui_flag)
774 xkb_flags |= entry.xkb_flag; 781 xkb_flags |= entry.xkb_flag;
775 } 782 }
783 // NumLock is always on.
784 xkb_flags |= num_lock_mod_mask_;
776 return xkb_flags; 785 return xkb_flags;
777 } 786 }
778 787
779 bool XkbKeyboardLayoutEngine::XkbLookup(xkb_keycode_t xkb_keycode, 788 bool XkbKeyboardLayoutEngine::XkbLookup(xkb_keycode_t xkb_keycode,
780 xkb_mod_mask_t xkb_flags, 789 xkb_mod_mask_t xkb_flags,
781 xkb_keysym_t* xkb_keysym, 790 xkb_keysym_t* xkb_keysym,
782 base::char16* character) const { 791 base::char16* character) const {
783 if (!xkb_state_) { 792 if (!xkb_state_) {
784 LOG(ERROR) << "No current XKB state"; 793 LOG(ERROR) << "No current XKB state";
785 return false; 794 return false;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 if (flags == base_flags) 884 if (flags == base_flags)
876 return base_character; 885 return base_character;
877 xkb_keysym_t keysym; 886 xkb_keysym_t keysym;
878 base::char16 character = 0; 887 base::char16 character = 0;
879 if (!XkbLookup(xkb_keycode, flags, &keysym, &character)) 888 if (!XkbLookup(xkb_keycode, flags, &keysym, &character))
880 character = kNone; 889 character = kNone;
881 return character; 890 return character;
882 } 891 }
883 892
884 } // namespace ui 893 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698