| Index: ui/chromeos/events/event_rewriter_chromeos.cc
|
| diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/ui/chromeos/events/event_rewriter_chromeos.cc
|
| similarity index 82%
|
| rename from chrome/browser/chromeos/events/event_rewriter.cc
|
| rename to ui/chromeos/events/event_rewriter_chromeos.cc
|
| index d622d52f11b2bf35d87509c276640b6c40a715a7..65c908087e5530874e019ec5c3e80a280164b3b4 100644
|
| --- a/chrome/browser/chromeos/events/event_rewriter.cc
|
| +++ b/ui/chromeos/events/event_rewriter_chromeos.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "chrome/browser/chromeos/events/event_rewriter.h"
|
| +#include "ui/chromeos/events/event_rewriter_chromeos.h"
|
|
|
| #include <stddef.h>
|
|
|
| @@ -11,20 +11,14 @@
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/strings/string_split.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/sys_info.h"
|
| -#include "chrome/browser/chromeos/login/ui/login_display_host.h"
|
| -#include "chrome/browser/extensions/extension_commands_global_registry.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
|
| -#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h"
|
| -#include "chrome/common/pref_names.h"
|
| #include "chromeos/chromeos_switches.h"
|
| -#include "components/prefs/pref_service.h"
|
| -#include "components/user_manager/user_manager.h"
|
| #include "ui/base/ime/chromeos/ime_keyboard.h"
|
| #include "ui/base/ime/chromeos/input_method_manager.h"
|
| +#include "ui/chromeos/events/pref_names.h"
|
| #include "ui/events/devices/input_device_manager.h"
|
| #include "ui/events/event.h"
|
| #include "ui/events/event_utils.h"
|
| @@ -34,8 +28,8 @@
|
| #include "ui/events/keycodes/keyboard_code_conversion.h"
|
|
|
| #if defined(USE_X11)
|
| -#include <X11/extensions/XInput2.h>
|
| #include <X11/Xlib.h>
|
| +#include <X11/extensions/XInput2.h>
|
|
|
| // Get rid of macros from Xlib.h that conflicts with other parts of the code.
|
| #undef RootWindow
|
| @@ -45,7 +39,7 @@
|
| #include "ui/events/keycodes/keyboard_code_conversion_x.h"
|
| #endif
|
|
|
| -namespace chromeos {
|
| +namespace ui {
|
|
|
| namespace {
|
|
|
| @@ -76,49 +70,49 @@ const struct ModifierRemapping {
|
| int flag;
|
| int remap_to;
|
| const char* pref_name;
|
| - EventRewriter::MutableKeyState result;
|
| + EventRewriterChromeOS::MutableKeyState result;
|
| } kModifierRemappings[] = {
|
| {// kModifierRemappingCtrl references this entry by index.
|
| ui::EF_CONTROL_DOWN,
|
| - input_method::kControlKey,
|
| + ::chromeos::input_method::kControlKey,
|
| prefs::kLanguageRemapControlKeyTo,
|
| {ui::EF_CONTROL_DOWN, ui::DomCode::CONTROL_LEFT, ui::DomKey::CONTROL,
|
| ui::VKEY_CONTROL}},
|
| {// kModifierRemappingNeoMod3 references this entry by index.
|
| ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN,
|
| - input_method::kNumModifierKeys,
|
| + ::chromeos::input_method::kNumModifierKeys,
|
| nullptr,
|
| {ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, ui::DomCode::CAPS_LOCK,
|
| ui::DomKey::ALT_GRAPH, ui::VKEY_ALTGR}},
|
| {ui::EF_COMMAND_DOWN,
|
| - input_method::kSearchKey,
|
| + ::chromeos::input_method::kSearchKey,
|
| prefs::kLanguageRemapSearchKeyTo,
|
| {ui::EF_COMMAND_DOWN, ui::DomCode::META_LEFT, ui::DomKey::META,
|
| ui::VKEY_LWIN}},
|
| {ui::EF_ALT_DOWN,
|
| - input_method::kAltKey,
|
| + ::chromeos::input_method::kAltKey,
|
| prefs::kLanguageRemapAltKeyTo,
|
| {ui::EF_ALT_DOWN, ui::DomCode::ALT_LEFT, ui::DomKey::ALT, ui::VKEY_MENU}},
|
| {ui::EF_NONE,
|
| - input_method::kVoidKey,
|
| + ::chromeos::input_method::kVoidKey,
|
| nullptr,
|
| {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::NONE, ui::VKEY_UNKNOWN}},
|
| {ui::EF_MOD3_DOWN,
|
| - input_method::kCapsLockKey,
|
| + ::chromeos::input_method::kCapsLockKey,
|
| prefs::kLanguageRemapCapsLockKeyTo,
|
| {ui::EF_MOD3_DOWN, ui::DomCode::CAPS_LOCK, ui::DomKey::CAPS_LOCK,
|
| ui::VKEY_CAPITAL}},
|
| {ui::EF_NONE,
|
| - input_method::kEscapeKey,
|
| + ::chromeos::input_method::kEscapeKey,
|
| prefs::kLanguageRemapEscapeKeyTo,
|
| {ui::EF_NONE, ui::DomCode::ESCAPE, ui::DomKey::ESCAPE, ui::VKEY_ESCAPE}},
|
| {ui::EF_NONE,
|
| - input_method::kBackspaceKey,
|
| + ::chromeos::input_method::kBackspaceKey,
|
| prefs::kLanguageRemapBackspaceKeyTo,
|
| {ui::EF_NONE, ui::DomCode::BACKSPACE, ui::DomKey::BACKSPACE,
|
| ui::VKEY_BACK}},
|
| {ui::EF_NONE,
|
| - input_method::kNumModifierKeys,
|
| + ::chromeos::input_method::kNumModifierKeys,
|
| prefs::kLanguageRemapDiamondKeyTo,
|
| {ui::EF_NONE, ui::DomCode::F15, ui::DomKey::F15, ui::VKEY_F15}}};
|
|
|
| @@ -128,20 +122,15 @@ const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1];
|
| // Gets a remapped key for |pref_name| key. For example, to find out which
|
| // key Search is currently remapped to, call the function with
|
| // prefs::kLanguageRemapSearchKeyTo.
|
| -const ModifierRemapping* GetRemappedKey(const std::string& pref_name,
|
| - const PrefService& pref_service) {
|
| +const ModifierRemapping* GetRemappedKey(
|
| + const std::string& pref_name,
|
| + EventRewriterChromeOS::Delegate* delegate) {
|
| + if (!delegate)
|
| + return nullptr;
|
| +
|
| int value = -1;
|
| - // If we're at the login screen, try to get the pref from the global prefs
|
| - // dictionary.
|
| - if (!LoginDisplayHost::default_host() ||
|
| - !LoginDisplayHost::default_host()
|
| - ->GetOobeUI()
|
| - ->signin_screen_handler()
|
| - ->GetKeyboardRemappedPrefValue(pref_name, &value)) {
|
| - if (!pref_service.FindPreference(pref_name))
|
| - return nullptr;
|
| - value = pref_service.GetInteger(pref_name);
|
| - }
|
| + if (!delegate->GetKeyboardRemappedPrefValue(pref_name, &value))
|
| + return nullptr;
|
|
|
| for (size_t i = 0; i < arraysize(kModifierRemappings); ++i) {
|
| if (value == kModifierRemappings[i].remap_to)
|
| @@ -152,7 +141,7 @@ const ModifierRemapping* GetRemappedKey(const std::string& pref_name,
|
|
|
| bool HasDiamondKey() {
|
| return base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - chromeos::switches::kHasChromeOSDiamondKey);
|
| + ::chromeos::switches::kHasChromeOSDiamondKey);
|
| }
|
|
|
| bool IsISOLevel5ShiftUsedByCurrentInputMethod() {
|
| @@ -160,43 +149,21 @@ bool IsISOLevel5ShiftUsedByCurrentInputMethod() {
|
| // it's not possible to make both features work. For now, we don't remap
|
| // Mod3Mask when Neo2 is in use.
|
| // TODO(yusukes): Remove the restriction.
|
| - input_method::InputMethodManager* manager =
|
| - input_method::InputMethodManager::Get();
|
| + ::chromeos::input_method::InputMethodManager* manager =
|
| + ::chromeos::input_method::InputMethodManager::Get();
|
| return manager->IsISOLevel5ShiftUsedByCurrentInputMethod();
|
| }
|
|
|
| -bool IsExtensionCommandRegistered(ui::KeyboardCode key_code, int flags) {
|
| - // Some keyboard events for ChromeOS get rewritten, such as:
|
| - // Search+Shift+Left gets converted to Shift+Home (BeginDocument).
|
| - // This doesn't make sense if the user has assigned that shortcut
|
| - // to an extension. Because:
|
| - // 1) The extension would, upon seeing a request for Ctrl+Shift+Home have
|
| - // to register for Shift+Home, instead.
|
| - // 2) The conversion is unnecessary, because Shift+Home (BeginDocument) isn't
|
| - // going to be executed.
|
| - // Therefore, we skip converting the accelerator if an extension has
|
| - // registered for this shortcut.
|
| - Profile* profile = ProfileManager::GetActiveUserProfile();
|
| - if (!profile || !extensions::ExtensionCommandsGlobalRegistry::Get(profile))
|
| - return false;
|
| -
|
| - int modifiers = flags & (ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
|
| - ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN);
|
| - ui::Accelerator accelerator(key_code, modifiers);
|
| - return extensions::ExtensionCommandsGlobalRegistry::Get(profile)
|
| - ->IsRegistered(accelerator);
|
| -}
|
| -
|
| -EventRewriter::DeviceType GetDeviceType(const std::string& device_name,
|
| - int vendor_id,
|
| - int product_id) {
|
| +EventRewriterChromeOS::DeviceType GetDeviceType(const std::string& device_name,
|
| + int vendor_id,
|
| + int product_id) {
|
| if (vendor_id == kHotrodRemoteVendorId &&
|
| product_id == kHotrodRemoteProductId) {
|
| - return EventRewriter::kDeviceHotrodRemote;
|
| + return EventRewriterChromeOS::kDeviceHotrodRemote;
|
| }
|
|
|
| if (base::LowerCaseEqualsASCII(device_name, "virtual core keyboard"))
|
| - return EventRewriter::kDeviceVirtualCoreKeyboard;
|
| + return EventRewriterChromeOS::kDeviceVirtualCoreKeyboard;
|
|
|
| std::vector<std::string> tokens = base::SplitString(
|
| device_name, " .", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
|
| @@ -211,10 +178,10 @@ EventRewriter::DeviceType GetDeviceType(const std::string& device_name,
|
| if (!found_keyboard && base::LowerCaseEqualsASCII(tokens[i], "keyboard"))
|
| found_keyboard = true;
|
| if (found_apple && found_keyboard)
|
| - return EventRewriter::kDeviceAppleKeyboard;
|
| + return EventRewriterChromeOS::kDeviceAppleKeyboard;
|
| }
|
|
|
| - return EventRewriter::kDeviceUnknown;
|
| + return EventRewriterChromeOS::kDeviceUnknown;
|
| }
|
|
|
| struct KeyboardRemapping {
|
| @@ -231,18 +198,19 @@ struct KeyboardRemapping {
|
| // - |dom_key| and |character| are set if |result.dom_key| is not NONE.
|
| // -|key_code| is set if |result.key_code| is not VKEY_UNKNOWN.
|
| // - |flags| are always set from |result.flags|, but this can be |EF_NONE|.
|
| - EventRewriter::MutableKeyState result;
|
| + EventRewriterChromeOS::MutableKeyState result;
|
| };
|
|
|
| -bool MatchKeyboardRemapping(const EventRewriter::MutableKeyState& suspect,
|
| - const KeyboardRemapping::Condition& test) {
|
| +bool MatchKeyboardRemapping(
|
| + const EventRewriterChromeOS::MutableKeyState& suspect,
|
| + const KeyboardRemapping::Condition& test) {
|
| return ((test.key_code == ui::VKEY_UNKNOWN) ||
|
| (test.key_code == suspect.key_code)) &&
|
| ((suspect.flags & test.flags) == test.flags);
|
| }
|
|
|
| -void ApplyRemapping(const EventRewriter::MutableKeyState& changes,
|
| - EventRewriter::MutableKeyState* state) {
|
| +void ApplyRemapping(const EventRewriterChromeOS::MutableKeyState& changes,
|
| + EventRewriterChromeOS::MutableKeyState* state) {
|
| state->flags |= changes.flags;
|
| if (changes.code != ui::DomCode::NONE)
|
| state->code = changes.code;
|
| @@ -258,8 +226,8 @@ void ApplyRemapping(const EventRewriter::MutableKeyState& changes,
|
| bool RewriteWithKeyboardRemappings(
|
| const KeyboardRemapping* mappings,
|
| size_t num_mappings,
|
| - const EventRewriter::MutableKeyState& input_state,
|
| - EventRewriter::MutableKeyState* remapped_state) {
|
| + const EventRewriterChromeOS::MutableKeyState& input_state,
|
| + EventRewriterChromeOS::MutableKeyState* remapped_state) {
|
| for (size_t i = 0; i < num_mappings; ++i) {
|
| const KeyboardRemapping& map = mappings[i];
|
| if (MatchKeyboardRemapping(input_state, map.condition)) {
|
| @@ -272,7 +240,7 @@ bool RewriteWithKeyboardRemappings(
|
| }
|
|
|
| void SetMeaningForLayout(ui::EventType type,
|
| - EventRewriter::MutableKeyState* state) {
|
| + EventRewriterChromeOS::MutableKeyState* state) {
|
| // Currently layout is applied by creating a temporary key event with the
|
| // current physical state, and extracting the layout results.
|
| ui::KeyEvent key(type, state->key_code, state->code, state->flags);
|
| @@ -302,18 +270,21 @@ ui::DomCode RelocateModifier(ui::DomCode code, ui::DomKeyLocation location) {
|
|
|
| } // namespace
|
|
|
| -EventRewriter::EventRewriter(ui::EventRewriter* sticky_keys_controller)
|
| +EventRewriterChromeOS::EventRewriterChromeOS(
|
| + Delegate* delegate,
|
| + ui::EventRewriter* sticky_keys_controller)
|
| : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE),
|
| - ime_keyboard_for_testing_(NULL),
|
| - pref_service_for_testing_(NULL),
|
| + ime_keyboard_for_testing_(nullptr),
|
| + delegate_(delegate),
|
| sticky_keys_controller_(sticky_keys_controller),
|
| pressed_modifier_latches_(ui::EF_NONE),
|
| latched_modifier_latches_(ui::EF_NONE),
|
| used_modifier_latches_(ui::EF_NONE) {}
|
|
|
| -EventRewriter::~EventRewriter() {}
|
| +EventRewriterChromeOS::~EventRewriterChromeOS() {}
|
|
|
| -EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting(
|
| +EventRewriterChromeOS::DeviceType
|
| +EventRewriterChromeOS::KeyboardDeviceAddedForTesting(
|
| int device_id,
|
| const std::string& device_name) {
|
| // Tests must avoid XI2 reserved device IDs.
|
| @@ -322,13 +293,13 @@ EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting(
|
| kUnknownProductId);
|
| }
|
|
|
| -void EventRewriter::RewriteMouseButtonEventForTesting(
|
| +void EventRewriterChromeOS::RewriteMouseButtonEventForTesting(
|
| const ui::MouseEvent& event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| RewriteMouseButtonEvent(event, rewritten_event);
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::RewriteEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::RewriteEvent(
|
| const ui::Event& event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| if ((event.type() == ui::ET_KEY_PRESSED) ||
|
| @@ -357,7 +328,7 @@ ui::EventRewriteStatus EventRewriter::RewriteEvent(
|
| return ui::EVENT_REWRITE_CONTINUE;
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::NextDispatchEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::NextDispatchEvent(
|
| const ui::Event& last_event,
|
| std::unique_ptr<ui::Event>* new_event) {
|
| if (sticky_keys_controller_) {
|
| @@ -372,7 +343,7 @@ ui::EventRewriteStatus EventRewriter::NextDispatchEvent(
|
| return ui::EVENT_REWRITE_CONTINUE;
|
| }
|
|
|
| -void EventRewriter::BuildRewrittenKeyEvent(
|
| +void EventRewriterChromeOS::BuildRewrittenKeyEvent(
|
| const ui::KeyEvent& key_event,
|
| const MutableKeyState& state,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| @@ -382,7 +353,7 @@ void EventRewriter::BuildRewrittenKeyEvent(
|
| rewritten_event->reset(rewritten_key_event);
|
| }
|
|
|
| -void EventRewriter::DeviceKeyPressedOrReleased(int device_id) {
|
| +void EventRewriterChromeOS::DeviceKeyPressedOrReleased(int device_id) {
|
| std::map<int, DeviceType>::const_iterator iter =
|
| device_id_to_type_.find(device_id);
|
| DeviceType type;
|
| @@ -400,22 +371,15 @@ void EventRewriter::DeviceKeyPressedOrReleased(int device_id) {
|
| last_keyboard_device_id_ = device_id;
|
| }
|
|
|
| -const PrefService* EventRewriter::GetPrefService() const {
|
| - if (pref_service_for_testing_)
|
| - return pref_service_for_testing_;
|
| - Profile* profile = ProfileManager::GetActiveUserProfile();
|
| - return profile ? profile->GetPrefs() : NULL;
|
| -}
|
| -
|
| -bool EventRewriter::IsAppleKeyboard() const {
|
| +bool EventRewriterChromeOS::IsAppleKeyboard() const {
|
| return IsLastKeyboardOfType(kDeviceAppleKeyboard);
|
| }
|
|
|
| -bool EventRewriter::IsHotrodRemote() const {
|
| +bool EventRewriterChromeOS::IsHotrodRemote() const {
|
| return IsLastKeyboardOfType(kDeviceHotrodRemote);
|
| }
|
|
|
| -bool EventRewriter::IsLastKeyboardOfType(DeviceType device_type) const {
|
| +bool EventRewriterChromeOS::IsLastKeyboardOfType(DeviceType device_type) const {
|
| if (last_keyboard_device_id_ == ui::ED_UNKNOWN_DEVICE)
|
| return false;
|
|
|
| @@ -431,20 +395,13 @@ bool EventRewriter::IsLastKeyboardOfType(DeviceType device_type) const {
|
| return type == device_type;
|
| }
|
|
|
| -bool EventRewriter::TopRowKeysAreFunctionKeys(const ui::KeyEvent& event) const {
|
| - const PrefService* prefs = GetPrefService();
|
| - return prefs && prefs->FindPreference(prefs::kLanguageSendFunctionKeys) &&
|
| - prefs->GetBoolean(prefs::kLanguageSendFunctionKeys);
|
| -}
|
| -
|
| -int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service,
|
| - const ui::Event& event,
|
| - int original_flags) const {
|
| +int EventRewriterChromeOS::GetRemappedModifierMasks(const ui::Event& event,
|
| + int original_flags) const {
|
| int unmodified_flags = original_flags;
|
| int rewritten_flags = pressed_modifier_latches_ | latched_modifier_latches_;
|
| for (size_t i = 0; unmodified_flags && (i < arraysize(kModifierRemappings));
|
| ++i) {
|
| - const ModifierRemapping* remapped_key = NULL;
|
| + const ModifierRemapping* remapped_key = nullptr;
|
| if (!(unmodified_flags & kModifierRemappings[i].flag))
|
| continue;
|
| switch (kModifierRemappings[i].flag) {
|
| @@ -477,7 +434,7 @@ int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service,
|
| }
|
| if (!remapped_key && kModifierRemappings[i].pref_name) {
|
| remapped_key =
|
| - GetRemappedKey(kModifierRemappings[i].pref_name, pref_service);
|
| + GetRemappedKey(kModifierRemappings[i].pref_name, delegate_);
|
| }
|
| if (remapped_key) {
|
| unmodified_flags &= ~kModifierRemappings[i].flag;
|
| @@ -487,10 +444,11 @@ int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service,
|
| return rewritten_flags | unmodified_flags;
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::RewriteKeyEvent(
|
| const ui::KeyEvent& key_event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| - if (IsExtensionCommandRegistered(key_event.key_code(), key_event.flags()))
|
| + if (delegate_ && delegate_->IsExtensionCommandRegistered(key_event.key_code(),
|
| + key_event.flags()))
|
| return ui::EVENT_REWRITE_CONTINUE;
|
| if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE)
|
| DeviceKeyPressedOrReleased(key_event.source_device_id());
|
| @@ -530,7 +488,8 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
|
| if (status == ui::EVENT_REWRITE_DISCARD)
|
| return ui::EVENT_REWRITE_DISCARD;
|
| is_sticky_key_extension_command =
|
| - IsExtensionCommandRegistered(state.key_code, state.flags);
|
| + delegate_ &&
|
| + delegate_->IsExtensionCommandRegistered(state.key_code, state.flags);
|
| }
|
|
|
| // If flags have changed, this may change the interpretation of the key,
|
| @@ -569,7 +528,7 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
|
| return status;
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::RewriteMouseButtonEvent(
|
| const ui::MouseEvent& mouse_event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| int flags = mouse_event.flags();
|
| @@ -610,7 +569,7 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseButtonEvent(
|
| return status;
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::RewriteMouseWheelEvent(
|
| const ui::MouseWheelEvent& wheel_event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| if (!sticky_keys_controller_)
|
| @@ -625,7 +584,7 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent(
|
| switch (status) {
|
| case ui::EVENT_REWRITE_REWRITTEN:
|
| case ui::EVENT_REWRITE_DISPATCH_ANOTHER:
|
| - // whell event has been rewritten and stored in |rewritten_event|.
|
| + // whell event has been rewritten and stored in |rewritten_event|.
|
| #if defined(USE_X11)
|
| ui::UpdateX11EventForFlags(rewritten_event->get());
|
| #endif
|
| @@ -648,7 +607,7 @@ ui::EventRewriteStatus EventRewriter::RewriteMouseWheelEvent(
|
| return status;
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::RewriteTouchEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::RewriteTouchEvent(
|
| const ui::TouchEvent& touch_event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| int flags = touch_event.flags();
|
| @@ -664,7 +623,7 @@ ui::EventRewriteStatus EventRewriter::RewriteTouchEvent(
|
| return ui::EVENT_REWRITE_REWRITTEN;
|
| }
|
|
|
| -ui::EventRewriteStatus EventRewriter::RewriteScrollEvent(
|
| +ui::EventRewriteStatus EventRewriterChromeOS::RewriteScrollEvent(
|
| const ui::ScrollEvent& scroll_event,
|
| std::unique_ptr<ui::Event>* rewritten_event) {
|
| if (!sticky_keys_controller_)
|
| @@ -680,25 +639,12 @@ ui::EventRewriteStatus EventRewriter::RewriteScrollEvent(
|
| return status;
|
| }
|
|
|
| -bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| - MutableKeyState* state) {
|
| +bool EventRewriterChromeOS::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| + MutableKeyState* state) {
|
| DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
|
| key_event.type() == ui::ET_KEY_RELEASED);
|
|
|
| - // Do nothing if we have just logged in as guest but have not restarted chrome
|
| - // process yet (so we are still on the login screen). In this situations we
|
| - // have no user profile so can not do anything useful.
|
| - // Note that currently, unlike other accounts, when user logs in as guest, we
|
| - // restart chrome process. In future this is to be changed.
|
| - // TODO(glotov): remove the following condition when we do not restart chrome
|
| - // when user logs in as guest.
|
| - // TODO(kpschoedel): check whether this is still necessary.
|
| - if (user_manager::UserManager::Get()->IsLoggedInAsGuest() &&
|
| - LoginDisplayHost::default_host())
|
| - return false;
|
| -
|
| - const PrefService* pref_service = GetPrefService();
|
| - if (!pref_service)
|
| + if (!delegate_ || !delegate_->RewriteModifierKeys())
|
| return false;
|
|
|
| // Preserve a copy of the original before rewriting |state| based on
|
| @@ -709,7 +655,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| bool exact_event = false;
|
|
|
| // First, remap the key code.
|
| - const ModifierRemapping* remapped_key = NULL;
|
| + const ModifierRemapping* remapped_key = nullptr;
|
| // Remapping based on DomKey.
|
| switch (incoming.key) {
|
| // On Chrome OS, F15 (XF86XK_Launch6) with NumLock (Mod2Mask) is sent
|
| @@ -720,7 +666,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| // syncable pref.
|
| if (HasDiamondKey())
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, delegate_);
|
| // Default behavior of F15 is Control, even if --has-chromeos-diamond-key
|
| // is absent, according to unit test comments.
|
| if (!remapped_key) {
|
| @@ -738,11 +684,11 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| if (incoming.code == ui::DomCode::CAPS_LOCK) {
|
| characteristic_flag = ui::EF_ALTGR_DOWN | ui::EF_MOD3_DOWN;
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, delegate_);
|
| } else {
|
| characteristic_flag = ui::EF_ALTGR_DOWN;
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, delegate_);
|
| }
|
| }
|
| if (remapped_key && remapped_key->result.key_code == ui::VKEY_CAPITAL)
|
| @@ -783,7 +729,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| case ui::DomCode::CAPS_LOCK:
|
| characteristic_flag = ui::EF_CAPS_LOCK_ON;
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, delegate_);
|
| break;
|
| case ui::DomCode::META_LEFT:
|
| case ui::DomCode::META_RIGHT:
|
| @@ -794,7 +740,7 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| remapped_key = kModifierRemappingCtrl;
|
| } else {
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapSearchKeyTo, delegate_);
|
| }
|
| // Default behavior is Super key, hence don't remap the event if the pref
|
| // is unavailable.
|
| @@ -803,22 +749,21 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| case ui::DomCode::CONTROL_RIGHT:
|
| characteristic_flag = ui::EF_CONTROL_DOWN;
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapControlKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapControlKeyTo, delegate_);
|
| break;
|
| case ui::DomCode::ALT_LEFT:
|
| case ui::DomCode::ALT_RIGHT:
|
| // ALT key
|
| characteristic_flag = ui::EF_ALT_DOWN;
|
| - remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapAltKeyTo, *pref_service);
|
| + remapped_key = GetRemappedKey(prefs::kLanguageRemapAltKeyTo, delegate_);
|
| break;
|
| case ui::DomCode::ESCAPE:
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapEscapeKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapEscapeKeyTo, delegate_);
|
| break;
|
| case ui::DomCode::BACKSPACE:
|
| remapped_key =
|
| - GetRemappedKey(prefs::kLanguageRemapBackspaceKeyTo, *pref_service);
|
| + GetRemappedKey(prefs::kLanguageRemapBackspaceKeyTo, delegate_);
|
| break;
|
| default:
|
| break;
|
| @@ -830,15 +775,14 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| state->key = remapped_key->result.key;
|
| incoming.flags |= characteristic_flag;
|
| characteristic_flag = remapped_key->flag;
|
| - if (remapped_key->remap_to == input_method::kCapsLockKey)
|
| + if (remapped_key->remap_to == ::chromeos::input_method::kCapsLockKey)
|
| characteristic_flag |= ui::EF_CAPS_LOCK_ON;
|
| state->code = RelocateModifier(
|
| state->code, ui::KeycodeConverter::DomCodeToLocation(incoming.code));
|
| }
|
|
|
| // Next, remap modifier bits.
|
| - state->flags |=
|
| - GetRemappedModifierMasks(*pref_service, key_event, incoming.flags);
|
| + state->flags |= GetRemappedModifierMasks(key_event, incoming.flags);
|
|
|
| // If the DomKey is not a modifier before remapping but is after, set the
|
| // modifier latches for the later non-modifier key's modifier states.
|
| @@ -871,10 +815,10 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| && incoming.key_code != ui::VKEY_CAPITAL
|
| #endif
|
| ) {
|
| - chromeos::input_method::ImeKeyboard* ime_keyboard =
|
| + ::chromeos::input_method::ImeKeyboard* ime_keyboard =
|
| ime_keyboard_for_testing_
|
| ? ime_keyboard_for_testing_
|
| - : chromeos::input_method::InputMethodManager::Get()
|
| + : ::chromeos::input_method::InputMethodManager::Get()
|
| ->GetImeKeyboard();
|
| ime_keyboard->SetCapsLockEnabled(!ime_keyboard->CapsLockIsEnabled());
|
| }
|
| @@ -882,13 +826,13 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
|
| return exact_event;
|
| }
|
|
|
| -void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event,
|
| - MutableKeyState* state) {
|
| +void EventRewriterChromeOS::RewriteNumPadKeys(const ui::KeyEvent& key_event,
|
| + MutableKeyState* state) {
|
| DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
|
| key_event.type() == ui::ET_KEY_RELEASED);
|
| static const struct NumPadRemapping {
|
| ui::KeyboardCode input_key_code;
|
| - EventRewriter::MutableKeyState result;
|
| + MutableKeyState result;
|
| } kNumPadRemappings[] = {
|
| {ui::VKEY_DELETE,
|
| {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'.'>::Character,
|
| @@ -934,8 +878,8 @@ void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event,
|
| }
|
| }
|
|
|
| -void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
|
| - MutableKeyState* state) {
|
| +void EventRewriterChromeOS::RewriteExtendedKeys(const ui::KeyEvent& key_event,
|
| + MutableKeyState* state) {
|
| DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
|
| key_event.type() == ui::ET_KEY_RELEASED);
|
| MutableKeyState incoming = *state;
|
| @@ -1021,8 +965,8 @@ void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
|
| }
|
| }
|
|
|
| -void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
|
| - MutableKeyState* state) {
|
| +void EventRewriterChromeOS::RewriteFunctionKeys(const ui::KeyEvent& key_event,
|
| + MutableKeyState* state) {
|
| CHECK(key_event.type() == ui::ET_KEY_PRESSED ||
|
| key_event.type() == ui::ET_KEY_RELEASED);
|
|
|
| @@ -1030,8 +974,9 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
|
| // By default the top row (F1-F12) keys are system keys for back, forward,
|
| // brightness, volume, etc. However, windows for v2 apps can optionally
|
| // request raw function keys for these keys.
|
| - bool top_row_keys_are_function_keys = TopRowKeysAreFunctionKeys(key_event);
|
| - bool search_is_pressed = (state->flags & ui::EF_COMMAND_DOWN) != 0;
|
| + const bool top_row_keys_are_function_keys =
|
| + delegate_ && delegate_->TopRowKeysAreFunctionKeys();
|
| + const bool search_is_pressed = (state->flags & ui::EF_COMMAND_DOWN) != 0;
|
|
|
| // Search? Top Row Result
|
| // ------- -------- ------
|
| @@ -1093,7 +1038,7 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
|
| // have different |KeyboardCode|s when modifiers are pressed, such as shift.
|
| static const struct {
|
| ui::DomCode input_dom_code;
|
| - EventRewriter::MutableKeyState result;
|
| + MutableKeyState result;
|
| } kNumberKeysToFkeys[] = {
|
| {ui::DomCode::DIGIT1,
|
| {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, ui::VKEY_F1}},
|
| @@ -1129,15 +1074,16 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
|
| }
|
| }
|
|
|
| -void EventRewriter::RewriteLocatedEvent(const ui::Event& event, int* flags) {
|
| - const PrefService* pref_service = GetPrefService();
|
| - if (!pref_service)
|
| +void EventRewriterChromeOS::RewriteLocatedEvent(const ui::Event& event,
|
| + int* flags) {
|
| + if (!delegate_)
|
| return;
|
| - *flags = GetRemappedModifierMasks(*pref_service, event, *flags);
|
| + *flags = GetRemappedModifierMasks(event, *flags);
|
| }
|
|
|
| -int EventRewriter::RewriteModifierClick(const ui::MouseEvent& mouse_event,
|
| - int* flags) {
|
| +int EventRewriterChromeOS::RewriteModifierClick(
|
| + const ui::MouseEvent& mouse_event,
|
| + int* flags) {
|
| // Remap Alt+Button1 to Button3.
|
| const int kAltLeftButton = (ui::EF_ALT_DOWN | ui::EF_LEFT_MOUSE_BUTTON);
|
| if (((*flags & kAltLeftButton) == kAltLeftButton) &&
|
| @@ -1154,7 +1100,8 @@ int EventRewriter::RewriteModifierClick(const ui::MouseEvent& mouse_event,
|
| return ui::EF_NONE;
|
| }
|
|
|
| -EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedInternal(
|
| +EventRewriterChromeOS::DeviceType
|
| +EventRewriterChromeOS::KeyboardDeviceAddedInternal(
|
| int device_id,
|
| const std::string& device_name,
|
| int vendor_id,
|
| @@ -1179,7 +1126,8 @@ EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedInternal(
|
| return type;
|
| }
|
|
|
| -EventRewriter::DeviceType EventRewriter::KeyboardDeviceAdded(int device_id) {
|
| +EventRewriterChromeOS::DeviceType EventRewriterChromeOS::KeyboardDeviceAdded(
|
| + int device_id) {
|
| if (!ui::InputDeviceManager::HasInstance())
|
| return kDeviceUnknown;
|
| const std::vector<ui::InputDevice>& keyboard_devices =
|
| @@ -1193,4 +1141,4 @@ EventRewriter::DeviceType EventRewriter::KeyboardDeviceAdded(int device_id) {
|
| return kDeviceUnknown;
|
| }
|
|
|
| -} // namespace chromeos
|
| +} // namespace ui
|
|
|