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

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

Issue 2645703005: Add a KeyboardLayoutEngine::SetCurrentLayoutFromBuffer implementation (Closed)
Patch Set: for landing Created 3 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 <stddef.h> 7 #include <stddef.h>
8 #include <xkbcommon/xkbcommon-names.h> 8 #include <xkbcommon/xkbcommon-names.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 } 685 }
686 LoadKeymapCallback reply_callback = base::Bind( 686 LoadKeymapCallback reply_callback = base::Bind(
687 &XkbKeyboardLayoutEngine::OnKeymapLoaded, weak_ptr_factory_.GetWeakPtr()); 687 &XkbKeyboardLayoutEngine::OnKeymapLoaded, weak_ptr_factory_.GetWeakPtr());
688 base::PostTaskWithTraits( 688 base::PostTaskWithTraits(
689 FROM_HERE, base::TaskTraits() 689 FROM_HERE, base::TaskTraits()
690 .WithShutdownBehavior( 690 .WithShutdownBehavior(
691 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN) 691 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
692 .MayBlock(), 692 .MayBlock(),
693 base::Bind(&LoadKeymap, layout_name, base::ThreadTaskRunnerHandle::Get(), 693 base::Bind(&LoadKeymap, layout_name, base::ThreadTaskRunnerHandle::Get(),
694 reply_callback)); 694 reply_callback));
695 #else
696 NOTIMPLEMENTED();
697 #endif // defined(OS_CHROMEOS)
695 return true; 698 return true;
696 #else
697 // Required by ozone-wayland (at least) for non ChromeOS builds. See
698 // http://xkbcommon.org/doc/current/md_doc_quick-guide.html for further info.
699 xkb_keymap* keymap = xkb_keymap_new_from_string(
700 xkb_context_.get(), layout_name.c_str(), XKB_KEYMAP_FORMAT_TEXT_V1,
701 XKB_KEYMAP_COMPILE_NO_FLAGS);
702 if (!keymap)
703 return false;
704 SetKeymap(keymap);
705 return true;
706 #endif // defined(OS_CHROMEOS)
707 } 699 }
708 700
709 void XkbKeyboardLayoutEngine::OnKeymapLoaded( 701 void XkbKeyboardLayoutEngine::OnKeymapLoaded(
710 const std::string& layout_name, 702 const std::string& layout_name,
711 std::unique_ptr<char, base::FreeDeleter> keymap_str) { 703 std::unique_ptr<char, base::FreeDeleter> keymap_str) {
712 if (keymap_str) { 704 if (keymap_str) {
713 xkb_keymap* keymap = xkb_keymap_new_from_string( 705 xkb_keymap* keymap = xkb_keymap_new_from_string(
714 xkb_context_.get(), keymap_str.get(), XKB_KEYMAP_FORMAT_TEXT_V1, 706 xkb_context_.get(), keymap_str.get(), XKB_KEYMAP_FORMAT_TEXT_V1,
715 XKB_KEYMAP_COMPILE_NO_FLAGS); 707 XKB_KEYMAP_COMPILE_NO_FLAGS);
716 XkbKeymapEntry entry = {layout_name, keymap}; 708 XkbKeymapEntry entry = {layout_name, keymap};
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 *key_code = AlphanumericKeyboardCode(xkb_keysym, character); 787 *key_code = AlphanumericKeyboardCode(xkb_keysym, character);
796 if (*key_code == VKEY_UNKNOWN) { 788 if (*key_code == VKEY_UNKNOWN) {
797 *key_code = DifficultKeyboardCode(dom_code, flags, xkb_keycode, xkb_flags, 789 *key_code = DifficultKeyboardCode(dom_code, flags, xkb_keycode, xkb_flags,
798 xkb_keysym, character); 790 xkb_keysym, character);
799 if (*key_code == VKEY_UNKNOWN) 791 if (*key_code == VKEY_UNKNOWN)
800 *key_code = DomCodeToUsLayoutNonLocatedKeyboardCode(dom_code); 792 *key_code = DomCodeToUsLayoutNonLocatedKeyboardCode(dom_code);
801 } 793 }
802 return true; 794 return true;
803 } 795 }
804 796
805 void XkbKeyboardLayoutEngine::SetKeymapFromStringForTest( 797 bool XkbKeyboardLayoutEngine::SetCurrentLayoutFromBuffer(
806 const char* keymap_string) { 798 const char* keymap_string,
807 xkb_keymap* keymap = xkb_keymap_new_from_string( 799 size_t size) {
808 xkb_context_.get(), keymap_string, XKB_KEYMAP_FORMAT_TEXT_V1, 800 xkb_keymap* keymap = xkb_keymap_new_from_buffer(
801 xkb_context_.get(), keymap_string, size, XKB_KEYMAP_FORMAT_TEXT_V1,
809 XKB_KEYMAP_COMPILE_NO_FLAGS); 802 XKB_KEYMAP_COMPILE_NO_FLAGS);
810 if (keymap) 803 if (!keymap)
811 SetKeymap(keymap); 804 return false;
805
806 SetKeymap(keymap);
807 return true;
812 } 808 }
813 809
814 void XkbKeyboardLayoutEngine::SetKeymap(xkb_keymap* keymap) { 810 void XkbKeyboardLayoutEngine::SetKeymap(xkb_keymap* keymap) {
815 xkb_state_.reset(xkb_state_new(keymap)); 811 xkb_state_.reset(xkb_state_new(keymap));
816 // Update flag map. 812 // Update flag map.
817 static const struct { 813 static const struct {
818 int ui_flag; 814 int ui_flag;
819 const char* xkb_name; 815 const char* xkb_name;
820 } flags[] = {{ui::EF_SHIFT_DOWN, XKB_MOD_NAME_SHIFT}, 816 } flags[] = {{ui::EF_SHIFT_DOWN, XKB_MOD_NAME_SHIFT},
821 {ui::EF_CONTROL_DOWN, XKB_MOD_NAME_CTRL}, 817 {ui::EF_CONTROL_DOWN, XKB_MOD_NAME_CTRL},
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 close_index = layout_name.size(); 969 close_index = layout_name.size();
974 *layout_variant = layout_name.substr(parentheses_index + 1, 970 *layout_variant = layout_name.substr(parentheses_index + 1,
975 close_index - parentheses_index - 1); 971 close_index - parentheses_index - 1);
976 } else if (dash_index != std::string::npos) { 972 } else if (dash_index != std::string::npos) {
977 *layout_id = layout_name.substr(0, dash_index); 973 *layout_id = layout_name.substr(0, dash_index);
978 *layout_variant = layout_name.substr(dash_index + 1); 974 *layout_variant = layout_name.substr(dash_index + 1);
979 } 975 }
980 } 976 }
981 977
982 } // namespace ui 978 } // 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