// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_XKEYBOARD_H_ #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_XKEYBOARD_H_ #pragma once #include <map> #include <string> #include <vector> namespace chromeos { namespace input_method { struct AutoRepeatRate { AutoRepeatRate() : initial_delay_in_ms(0), repeat_interval_in_ms(0) {} unsigned int initial_delay_in_ms; unsigned int repeat_interval_in_ms; }; enum ModifierKey { kSearchKey = 0, // Customizable. kLeftControlKey, // Customizable. kLeftAltKey, // Customizable. kVoidKey, kCapsLockKey, // IMPORTANT: You should update kCustomizableKeys[] in .cc file, if you // add a customizable key. kNumModifierKeys, }; struct ModifierKeyPair { ModifierKeyPair(ModifierKey in_original, ModifierKey in_replacement) : original(in_original), replacement(in_replacement) {} bool operator==(const ModifierKeyPair& rhs) const { // For CheckMap() in chromeos_keyboard_unittest.cc. return (rhs.original == original) && (rhs.replacement == replacement); } ModifierKey original; // Replace the key with ModifierKey replacement; // this key. }; typedef std::vector<ModifierKeyPair> ModifierMap; // Sets the current keyboard layout to |layout_name|. This function does not // change the current mapping of the modifier keys. Returns true on success. bool SetCurrentKeyboardLayoutByName(const std::string& layout_name); // Remaps modifier keys. This function does not change the current keyboard // layout. Returns true on success. // Notice: For now, you can't remap Left Control and Left Alt keys to CapsLock. bool RemapModifierKeys(const ModifierMap& modifier_map); // Turns on and off the auto-repeat of the keyboard. Returns true on success. bool SetAutoRepeatEnabled(bool enabled); // Sets the auto-repeat rate of the keyboard, initial delay in ms, and repeat // interval in ms. Returns true on success. bool SetAutoRepeatRate(const AutoRepeatRate& rate); // // WARNING: DO NOT USE FUNCTIONS/CLASSES/TYPEDEFS BELOW. They are only for // unittests. See the definitions in chromeos_keyboard.cc for details. // // Converts |key| to a modifier key name which is used in // /usr/share/X11/xkb/symbols/chromeos. inline std::string ModifierKeyToString(ModifierKey key) { switch (key) { case kSearchKey: return "search"; case kLeftControlKey: return "leftcontrol"; case kLeftAltKey: return "leftalt"; case kVoidKey: return "disabled"; case kCapsLockKey: return "capslock"; case kNumModifierKeys: break; } return ""; } // Creates a full XKB layout name like // "gb(extd)+chromeos(leftcontrol_disabled_leftalt),us" // from modifier key mapping and |layout_name|, such as "us", "us(dvorak)", and // "gb(extd)". Returns an empty string on error. std::string CreateFullXkbLayoutName(const std::string& layout_name, const ModifierMap& modifire_map); // Returns true if caps lock is enabled. // ONLY FOR UNIT TEST. DO NOT USE THIS FUNCTION. bool CapsLockIsEnabled(); // Sets the caps lock status to |enable_caps_lock|. void SetCapsLockEnabled(bool enabled); // Returns true if |key| is in |modifier_map| as replacement. bool ContainsModifierKeyAsReplacement( const ModifierMap& modifier_map, ModifierKey key); } // namespace input_method } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_XKEYBOARD_H_