Index: ui/events/ozone/evdev/input_controller_evdev.cc |
diff --git a/ui/events/ozone/evdev/input_controller_evdev.cc b/ui/events/ozone/evdev/input_controller_evdev.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..63d1e32454fcd71281aa8e7a3604049cf1e44b17 |
--- /dev/null |
+++ b/ui/events/ozone/evdev/input_controller_evdev.cc |
@@ -0,0 +1,178 @@ |
+// Copyright 2014 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. |
+ |
+#include "ui/events/ozone/evdev/input_controller_evdev.h" |
+ |
+#include <algorithm> |
+#include <linux/input.h> |
+ |
+#include "base/thread_task_runner_handle.h" |
+#include "ui/events/ozone/evdev/input_device_factory_evdev_proxy.h" |
+#include "ui/events/ozone/evdev/keyboard_evdev.h" |
+#include "ui/events/ozone/evdev/mouse_button_map_evdev.h" |
+ |
+namespace ui { |
+ |
+InputControllerEvdev::InputControllerEvdev(KeyboardEvdev* keyboard, |
+ MouseButtonMapEvdev* button_map) |
+ : keyboard_(keyboard), button_map_(button_map), weak_ptr_factory_(this) { |
+} |
+ |
+InputControllerEvdev::~InputControllerEvdev() { |
+} |
+ |
+void InputControllerEvdev::SetInputDeviceFactory( |
+ InputDeviceFactoryEvdevProxy* input_device_factory) { |
+ input_device_factory_ = input_device_factory; |
+ |
+ UpdateDeviceSettings(); |
+ UpdateCapsLockLed(); |
+} |
+ |
+void InputControllerEvdev::set_has_mouse(bool has_mouse) { |
+ has_mouse_ = has_mouse; |
+} |
+ |
+void InputControllerEvdev::set_has_touchpad(bool has_touchpad) { |
+ has_touchpad_ = has_touchpad; |
+} |
+ |
+void InputControllerEvdev::SetInputDevicesEnabled(bool enabled) { |
+ input_device_settings_.enable_devices = enabled; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+bool InputControllerEvdev::HasMouse() { |
+ return has_mouse_; |
+} |
+ |
+bool InputControllerEvdev::HasTouchpad() { |
+ return has_touchpad_; |
+} |
+ |
+bool InputControllerEvdev::IsCapsLockEnabled() { |
+ return keyboard_->IsCapsLockEnabled(); |
+} |
+ |
+void InputControllerEvdev::SetCapsLockEnabled(bool enabled) { |
+ keyboard_->SetCapsLockEnabled(enabled); |
+ UpdateCapsLockLed(); |
+} |
+ |
+void InputControllerEvdev::SetNumLockEnabled(bool enabled) { |
+ // No num lock on Chrome OS. |
+} |
+ |
+bool InputControllerEvdev::IsAutoRepeatEnabled() { |
+ return keyboard_->IsAutoRepeatEnabled(); |
+} |
+ |
+void InputControllerEvdev::SetAutoRepeatEnabled(bool enabled) { |
+ keyboard_->SetAutoRepeatEnabled(enabled); |
+} |
+ |
+void InputControllerEvdev::SetAutoRepeatRate(const base::TimeDelta& delay, |
+ const base::TimeDelta& interval) { |
+ keyboard_->SetAutoRepeatRate(delay, interval); |
+} |
+ |
+void InputControllerEvdev::GetAutoRepeatRate(base::TimeDelta* delay, |
+ base::TimeDelta* interval) { |
+ keyboard_->GetAutoRepeatRate(delay, interval); |
+} |
+ |
+void InputControllerEvdev::SetInternalTouchpadEnabled(bool enabled) { |
+ input_device_settings_.enable_internal_touchpad = enabled; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetInternalKeyboardFilter( |
+ bool enable_filter, |
+ std::vector<DomCode> allowed_keys) { |
+ input_device_settings_.enable_internal_keyboard_filter = enable_filter; |
+ input_device_settings_.internal_keyboard_allowed_keys = allowed_keys; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetTouchpadSensitivity(int value) { |
+ input_device_settings_.touchpad_sensitivity = value; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetTapToClick(bool enabled) { |
+ input_device_settings_.tap_to_click_enabled = enabled; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetThreeFingerClick(bool enabled) { |
+ input_device_settings_.three_finger_click_enabled = enabled; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetTapDragging(bool enabled) { |
+ input_device_settings_.tap_dragging_enabled = enabled; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetNaturalScroll(bool enabled) { |
+ input_device_settings_.natural_scroll_enabled = enabled; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetMouseSensitivity(int value) { |
+ input_device_settings_.mouse_sensitivity = value; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::SetPrimaryButtonRight(bool right) { |
+ button_map_->UpdateButtonMap(BTN_LEFT, right ? BTN_RIGHT : BTN_LEFT); |
+ button_map_->UpdateButtonMap(BTN_RIGHT, right ? BTN_LEFT : BTN_RIGHT); |
+} |
+ |
+void InputControllerEvdev::SetTapToClickPaused(bool state) { |
+ input_device_settings_.tap_to_click_paused = state; |
+ ScheduleUpdateDeviceSettings(); |
+} |
+ |
+void InputControllerEvdev::GetTouchDeviceStatus( |
+ const GetTouchDeviceStatusReply& reply) { |
+ if (input_device_factory_) |
+ input_device_factory_->GetTouchDeviceStatus(reply); |
+ else |
+ reply.Run(make_scoped_ptr(new std::string)); |
+} |
+ |
+void InputControllerEvdev::GetTouchEventLog( |
+ const base::FilePath& out_dir, |
+ const GetTouchEventLogReply& reply) { |
+ if (input_device_factory_) |
+ input_device_factory_->GetTouchEventLog(out_dir, reply); |
+ else |
+ reply.Run(make_scoped_ptr(new std::vector<base::FilePath>)); |
+} |
+ |
+void InputControllerEvdev::ScheduleUpdateDeviceSettings() { |
+ if (!input_device_factory_ || settings_update_pending_) |
+ return; |
+ base::ThreadTaskRunnerHandle::Get()->PostTask( |
+ FROM_HERE, base::Bind(&InputControllerEvdev::UpdateDeviceSettings, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ settings_update_pending_ = true; |
+} |
+ |
+void InputControllerEvdev::UpdateDeviceSettings() { |
+ input_device_factory_->UpdateInputDeviceSettings(input_device_settings_); |
+ settings_update_pending_ = false; |
+} |
+ |
+void InputControllerEvdev::UpdateCapsLockLed() { |
+ if (!input_device_factory_) |
+ return; |
+ bool caps_lock_state = IsCapsLockEnabled(); |
+ if (caps_lock_state != caps_lock_led_state_) |
+ input_device_factory_->SetCapsLockLed(caps_lock_state); |
+ caps_lock_led_state_ = caps_lock_state; |
+} |
+ |
+} // namespace ui |