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

Unified Diff: chrome/browser/chromeos/input_method/xkeyboard.h

Issue 9264004: Make almost all public functions in XKeyboard pure virtual (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/input_method/xkeyboard.h
diff --git a/chrome/browser/chromeos/input_method/xkeyboard.h b/chrome/browser/chromeos/input_method/xkeyboard.h
index 15d1b82a7a4336fb6bd82f2d7b32b8129ef20005..8d3c9a2b1bce65d1d7558a418df74865574c96b5 100644
--- a/chrome/browser/chromeos/input_method/xkeyboard.h
+++ b/chrome/browser/chromeos/input_method/xkeyboard.h
@@ -6,8 +6,6 @@
#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_XKEYBOARD_H_
#pragma once
-#include <queue>
-#include <set>
#include <string>
#include <vector>
@@ -55,24 +53,22 @@ class InputMethodUtil;
class XKeyboard {
public:
- // Note: at this moment, classes other than InputMethodManager should not
- // instantiate the XKeyboard class.
- explicit XKeyboard(const InputMethodUtil& util);
- ~XKeyboard();
+ virtual ~XKeyboard() {}
// 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);
+ virtual bool SetCurrentKeyboardLayoutByName(
+ const std::string& layout_name) = 0;
// Remaps modifier keys. This function does not change the current keyboard
// layout. Returns true on success. For now, you can't remap Left Control and
// Left Alt keys to caps lock.
- bool RemapModifierKeys(const ModifierMap& modifier_map);
+ virtual bool RemapModifierKeys(const ModifierMap& modifier_map) = 0;
// Sets the current keyboard layout again. We have to call the function every
// time when "XI_HierarchyChanged" XInput2 event is sent to Chrome. See
// xinput_hierarchy_changed_event_listener.h for details.
- bool ReapplyCurrentKeyboardLayout();
+ virtual bool ReapplyCurrentKeyboardLayout() = 0;
// Updates keyboard LEDs on all keyboards.
// XKB asymmetrically propagates keyboard modifier indicator state changes to
@@ -83,120 +79,77 @@ class XKeyboard {
// state change down to that one keyboard.
// This function changes LEDs on all keyboards by explicitly updating the
// core/master keyboard.
- void ReapplyCurrentModifierLockStatus();
+ virtual void ReapplyCurrentModifierLockStatus() = 0;
// Sets the Caps Lock and Num Lock status. Do not call the function from
// non-UI threads.
- void SetLockedModifiers(ModifierLockStatus new_caps_lock_status,
- ModifierLockStatus new_num_lock_status);
+ virtual void SetLockedModifiers(ModifierLockStatus new_caps_lock_status,
+ ModifierLockStatus new_num_lock_status) = 0;
// Sets the num lock status to |enable_num_lock|. Do not call the function
// from non-UI threads.
- void SetNumLockEnabled(bool enable_num_lock);
+ virtual void SetNumLockEnabled(bool enable_num_lock) = 0;
// Sets the caps lock status to |enable_caps_lock|. Do not call the function
// from non-UI threads.
- void SetCapsLockEnabled(bool enable_caps_lock);
-
- // Set true on |out_caps_lock_enabled| if Caps Lock is enabled. Set true on
- // |out_num_lock_enabled| if Num Lock (or to be precise, the modifier
- // specified by |num_lock_mask|) is enabled. Both 'out' parameters can be
- // NULL. When |out_num_lock_enabled| is NULL, |num_lock_mask| is ignored (you
- // can pass 0 in this case). Do not call the function from non-UI threads.
- static void GetLockedModifiers(unsigned int num_lock_mask,
- bool* out_caps_lock_enabled,
- bool* out_num_lock_enabled);
+ virtual void SetCapsLockEnabled(bool enable_caps_lock) = 0;
// Returns true if num lock is enabled. Do not call the function from non-UI
// threads.
- static bool NumLockIsEnabled(unsigned int num_lock_mask);
+ virtual bool NumLockIsEnabled() = 0;
// Returns true if caps lock is enabled. Do not call the function from non-UI
// threads.
- static bool CapsLockIsEnabled();
+ virtual bool CapsLockIsEnabled() = 0;
+
+ // 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. Do not call this function
+ // directly: it is public for testability.
+ virtual std::string CreateFullXkbLayoutName(
+ const std::string& layout_name,
+ const ModifierMap& modifire_map) = 0;
+
+ // Returns a mask (e.g. 1U<<4) for Num Lock. On error, returns 0.
+ // TODO(yusukes): Move this and webdriver::GetXModifierMask() functions in
+ // chrome/test/webdriver/keycode_text_conversion_x.cc to ui/base/x/x11_util.
+ // The two functions are almost the same.
+ virtual unsigned int GetNumLockMask() = 0;
+
+ // Set true on |out_caps_lock_enabled| if Caps Lock is enabled. Set true on
+ // |out_num_lock_enabled| if Num Lock is enabled. Both out parameters can be
+ // NULL. Do not call the function from non-UI threads.
+ virtual void GetLockedModifiers(bool* out_caps_lock_enabled,
+ bool* out_num_lock_enabled) = 0;
// Turns on and off the auto-repeat of the keyboard. Returns true on success.
// Do not call the function from non-UI threads.
+ // TODO(yusukes): Make this function non-static so we can mock it.
static 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. Do not call the function from
// non-UI threads.
+ // TODO(yusukes): Make this function non-static so we can mock it.
static bool SetAutoRepeatRate(const AutoRepeatRate& rate);
- // Returns a mask (e.g. 1U<<4) for Num Lock. On error, returns 0.
- static unsigned int GetNumLockMask();
-
- protected:
- // 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. This function is
- // protected: for testability.
- std::string CreateFullXkbLayoutName(const std::string& layout_name,
- const ModifierMap& modifire_map);
-
- // Returns true if |key| is in |modifier_map| as replacement. This function is
- // protected: for testability.
- static bool ContainsModifierKeyAsReplacement(const ModifierMap& modifier_map,
- ModifierKey key);
-
- // THIS FUNCTION IS ONLY FOR UNIT TESTS.
// Returns true if auto repeat is enabled. This function is protected: for
// testability.
- static bool GetAutoRepeatEnabled();
+ static bool GetAutoRepeatEnabledForTesting();
- // THIS FUNCTION IS ONLY FOR UNIT TESTS.
// On success, set current auto repeat rate on |out_rate| and returns true.
// Returns false otherwise. This function is protected: for testability.
- static bool GetAutoRepeatRate(AutoRepeatRate* out_rate);
-
- private:
- // This function is used by SetLayout() and RemapModifierKeys(). Calls
- // setxkbmap command if needed, and updates the last_full_layout_name_ cache.
- bool SetLayoutInternal(const std::string& layout_name,
- const ModifierMap& modifier_map,
- bool force);
-
- // Executes 'setxkbmap -layout ...' command asynchronously using a layout name
- // in the |execute_queue_|. Do nothing if the queue is empty.
- // TODO(yusukes): Use libxkbfile.so instead of the command (crosbug.com/13105)
- void MaybeExecuteSetLayoutCommand();
-
- // Returns true if the XKB layout uses the right Alt key for special purposes
- // like AltGr.
- bool KeepRightAlt(const std::string& xkb_layout_name) const;
-
- // Returns true if the XKB layout uses the CapsLock key for special purposes.
- // For example, since US Colemak layout uses the key as back space,
- // KeepCapsLock("us(colemak)") would return true.
- bool KeepCapsLock(const std::string& xkb_layout_name) const;
-
- // Converts |key| to a modifier key name which is used in
- // /usr/share/X11/xkb/symbols/chromeos.
- static std::string ModifierKeyToString(ModifierKey key);
-
- // Called when execve'd setxkbmap process exits.
- static void OnSetLayoutFinish(pid_t pid, int status, XKeyboard* self);
-
- const bool is_running_on_chrome_os_;
- unsigned int num_lock_mask_;
-
- // The current Num Lock and Caps Lock status. If true, enabled.
- bool current_num_lock_status_;
- bool current_caps_lock_status_;
- // The XKB layout name which we set last time like "us" and "us(dvorak)".
- std::string current_layout_name_;
- // The mapping of modifier keys we set last time.
- ModifierMap current_modifier_map_;
-
- // A queue for executing setxkbmap one by one.
- std::queue<std::string> execute_queue_;
-
- std::set<std::string> keep_right_alt_xkb_layout_names_;
- std::set<std::string> caps_lock_remapped_xkb_layout_names_;
-
- DISALLOW_COPY_AND_ASSIGN(XKeyboard);
+ static bool GetAutoRepeatRateForTesting(AutoRepeatRate* out_rate);
+
+ // Returns true if |key| is in |modifier_map| as replacement. Do not call this
+ // function directly: it is public for testability.
+ static bool ContainsModifierKeyAsReplacement(const ModifierMap& modifier_map,
+ ModifierKey key);
+
+ // Note: At this moment, classes other than InputMethodManager should not
+ // instantiate the XKeyboard class.
+ static XKeyboard* Create(const InputMethodUtil& util);
};
} // namespace input_method
« no previous file with comments | « chrome/browser/chromeos/input_method/input_method_manager.cc ('k') | chrome/browser/chromeos/input_method/xkeyboard.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698