1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
// Copyright (c) 2012 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_
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
namespace base {
class SequencedTaskRunner;
} // namespace base
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 ModifierLockStatus {
kDisableLock = 0,
kEnableLock,
kDontChange,
};
enum ModifierKey {
kSearchKey = 0, // Customizable.
kControlKey, // Customizable.
kAltKey, // Customizable.
kVoidKey,
kCapsLockKey,
// IMPORTANT: You should update kCustomizableKeys[] in .cc file, if you
// add a customizable key.
kNumModifierKeys,
};
class InputMethodUtil;
class XKeyboard {
public:
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.
virtual bool SetCurrentKeyboardLayoutByName(
const std::string& layout_name) = 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.
virtual bool ReapplyCurrentKeyboardLayout() = 0;
// Updates keyboard LEDs on all keyboards.
// XKB asymmetrically propagates keyboard modifier indicator state changes to
// slave keyboards. If the state change is initiated from a client to the
// "core/master keyboard", XKB changes global state and pushes an indication
// change down to all keyboards. If the state change is initiated by one slave
// (physical) keyboard, it changes global state but only pushes an indicator
// state change down to that one keyboard.
// This function changes LEDs on all keyboards by explicitly updating the
// core/master keyboard.
virtual void ReapplyCurrentModifierLockStatus() = 0;
// Sets the Caps Lock and Num Lock status. Do not call the function from
// non-UI threads.
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.
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.
virtual void SetCapsLockEnabled(bool enable_caps_lock) = 0;
// Returns true if num lock is enabled. Do not call the function from non-UI
// threads.
virtual bool NumLockIsEnabled() = 0;
// Returns true if caps lock is enabled. Do not call the function from non-UI
// threads.
virtual bool CapsLockIsEnabled() = 0;
// Returns a mask (e.g. 1U<<4) for Num Lock. On error, returns 0. Do not call
// the function from non-UI threads.
// 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.
virtual bool SetAutoRepeatEnabled(bool enabled) = 0;
// 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.
virtual bool SetAutoRepeatRate(const AutoRepeatRate& rate) = 0;
// Returns true if auto repeat is enabled.
static bool GetAutoRepeatEnabledForTesting();
// On success, set current auto repeat rate on |out_rate| and returns true.
// Returns false otherwise.
static bool GetAutoRepeatRateForTesting(AutoRepeatRate* out_rate);
// Returns false if |layout_name| contains a bad character.
static bool CheckLayoutNameForTesting(const std::string& layout_name);
// Creates an instance of XKeyboard. |default_task_runner| is used to verify
// thread-safe usage (all methods must be invoked in the context of
// default_task_runner).
// Note: At this moment, classes other than InputMethodManager should not
// instantiate the XKeyboard class.
static XKeyboard* Create(
const InputMethodUtil& util,
const scoped_refptr<base::SequencedTaskRunner>& default_task_runner);
};
} // namespace input_method
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_XKEYBOARD_H_
|