Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / chromeos / system / input_device_settings_impl_ozone.cc
blobb9e92df6d83dab6270822ae2b481abd34e52d5cb
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
3 // found in the LICENSE file.
5 #include "chrome/browser/chromeos/system/input_device_settings.h"
7 #include "content/public/browser/browser_thread.h"
8 #include "ui/ozone/public/input_controller.h"
9 #include "ui/ozone/public/ozone_platform.h"
11 namespace chromeos {
12 namespace system {
14 namespace {
16 InputDeviceSettings* g_instance = nullptr;
17 InputDeviceSettings* g_test_instance = nullptr;
19 // InputDeviceSettings for Linux without X11 (a.k.a. Ozone).
20 class InputDeviceSettingsImplOzone : public InputDeviceSettings {
21 public:
22 InputDeviceSettingsImplOzone();
24 protected:
25 ~InputDeviceSettingsImplOzone() override {}
27 private:
28 // Overridden from InputDeviceSettings.
29 void TouchpadExists(const DeviceExistsCallback& callback) override;
30 void UpdateTouchpadSettings(const TouchpadSettings& settings) override;
31 void SetTouchpadSensitivity(int value) override;
32 void SetTapToClick(bool enabled) override;
33 void SetThreeFingerClick(bool enabled) override;
34 void SetTapDragging(bool enabled) override;
35 void SetNaturalScroll(bool enabled) override;
36 void MouseExists(const DeviceExistsCallback& callback) override;
37 void UpdateMouseSettings(const MouseSettings& settings) override;
38 void SetMouseSensitivity(int value) override;
39 void SetPrimaryButtonRight(bool right) override;
40 void ReapplyTouchpadSettings() override;
41 void ReapplyMouseSettings() override;
43 // Cached InputController pointer. It should be fixed throughout the browser
44 // session.
45 ui::InputController* input_controller_;
47 // Respective device setting objects.
48 TouchpadSettings current_touchpad_settings_;
49 MouseSettings current_mouse_settings_;
51 DISALLOW_COPY_AND_ASSIGN(InputDeviceSettingsImplOzone);
54 InputDeviceSettingsImplOzone::InputDeviceSettingsImplOzone()
55 : input_controller_(
56 ui::OzonePlatform::GetInstance()->GetInputController()) {
57 // Make sure the input controller does exist.
58 DCHECK(ui::OzonePlatform::GetInstance()->GetInputController());
61 void InputDeviceSettingsImplOzone::TouchpadExists(
62 const DeviceExistsCallback& callback) {
63 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
64 callback.Run(input_controller_->HasTouchpad());
67 void InputDeviceSettingsImplOzone::UpdateTouchpadSettings(
68 const TouchpadSettings& settings) {
69 if (current_touchpad_settings_.Update(settings))
70 ReapplyTouchpadSettings();
73 void InputDeviceSettingsImplOzone::SetTouchpadSensitivity(int value) {
74 DCHECK(value >= kMinPointerSensitivity && value <= kMaxPointerSensitivity);
75 current_touchpad_settings_.SetSensitivity(value);
76 input_controller_->SetTouchpadSensitivity(value);
79 void InputDeviceSettingsImplOzone::SetNaturalScroll(bool enabled) {
80 current_touchpad_settings_.SetNaturalScroll(enabled);
81 input_controller_->SetNaturalScroll(enabled);
84 void InputDeviceSettingsImplOzone::SetTapToClick(bool enabled) {
85 current_touchpad_settings_.SetTapToClick(enabled);
86 input_controller_->SetTapToClick(enabled);
89 void InputDeviceSettingsImplOzone::SetThreeFingerClick(bool enabled) {
90 // For Alex/ZGB.
91 current_touchpad_settings_.SetThreeFingerClick(enabled);
92 input_controller_->SetThreeFingerClick(enabled);
95 void InputDeviceSettingsImplOzone::SetTapDragging(bool enabled) {
96 current_touchpad_settings_.SetTapDragging(enabled);
97 input_controller_->SetTapDragging(enabled);
100 void InputDeviceSettingsImplOzone::MouseExists(
101 const DeviceExistsCallback& callback) {
102 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
103 callback.Run(input_controller_->HasMouse());
106 void InputDeviceSettingsImplOzone::UpdateMouseSettings(
107 const MouseSettings& update) {
108 if (current_mouse_settings_.Update(update))
109 ReapplyMouseSettings();
112 void InputDeviceSettingsImplOzone::SetMouseSensitivity(int value) {
113 DCHECK(value >= kMinPointerSensitivity && value <= kMaxPointerSensitivity);
114 current_mouse_settings_.SetSensitivity(value);
115 input_controller_->SetMouseSensitivity(value);
118 void InputDeviceSettingsImplOzone::SetPrimaryButtonRight(bool right) {
119 current_mouse_settings_.SetPrimaryButtonRight(right);
120 input_controller_->SetPrimaryButtonRight(right);
123 void InputDeviceSettingsImplOzone::ReapplyTouchpadSettings() {
124 TouchpadSettings::Apply(current_touchpad_settings_, this);
127 void InputDeviceSettingsImplOzone::ReapplyMouseSettings() {
128 MouseSettings::Apply(current_mouse_settings_, this);
131 } // namespace
133 // static
134 InputDeviceSettings* InputDeviceSettings::Get() {
135 if (g_test_instance)
136 return g_test_instance;
137 if (!g_instance)
138 g_instance = new InputDeviceSettingsImplOzone;
139 return g_instance;
142 // static
143 void InputDeviceSettings::SetSettingsForTesting(
144 InputDeviceSettings* test_settings) {
145 if (g_test_instance == test_settings)
146 return;
147 delete g_test_instance;
148 g_test_instance = test_settings;
151 } // namespace system
152 } // namespace chromeos