| 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
|
|
|