blob: 947e84cbed0f74aee2511ae96c260eaa23afe80f [file] [log] [blame]
// 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.
#ifndef UI_EVENTS_OZONE_EVDEV_INPUT_CONTROLLER_EVDEV_H_
#define UI_EVENTS_OZONE_EVDEV_INPUT_CONTROLLER_EVDEV_H_
#include <string>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
#include "ui/events/ozone/evdev/input_device_settings_evdev.h"
#include "ui/ozone/public/input_controller.h"
namespace ui {
class InputDeviceFactoryEvdevProxy;
class KeyboardEvdev;
class MouseButtonMapEvdev;
// Ozone InputController implementation for the Linux input subsystem ("evdev").
class EVENTS_OZONE_EVDEV_EXPORT InputControllerEvdev : public InputController {
public:
InputControllerEvdev(KeyboardEvdev* keyboard,
MouseButtonMapEvdev* button_map);
~InputControllerEvdev() override;
// Initialize device factory. This would be in the constructor if it was
// built early enough for that to be possible.
void SetInputDeviceFactory(
InputDeviceFactoryEvdevProxy* input_device_factory);
void set_has_mouse(bool has_mouse);
void set_has_touchpad(bool has_touchpad);
void SetInputDevicesEnabled(bool enabled);
// InputController:
bool HasMouse() override;
bool HasTouchpad() override;
bool IsCapsLockEnabled() override;
void SetCapsLockEnabled(bool enabled) override;
void SetNumLockEnabled(bool enabled) override;
bool IsAutoRepeatEnabled() override;
void SetAutoRepeatEnabled(bool enabled) override;
void SetAutoRepeatRate(const base::TimeDelta& delay,
const base::TimeDelta& interval) override;
void GetAutoRepeatRate(base::TimeDelta* delay,
base::TimeDelta* interval) override;
void SetCurrentLayoutByName(const std::string& layout_name) override;
void SetTouchEventLoggingEnabled(bool enabled) override;
void SetTouchpadSensitivity(int value) override;
void SetTapToClick(bool enabled) override;
void SetThreeFingerClick(bool enabled) override;
void SetTapDragging(bool enabled) override;
void SetNaturalScroll(bool enabled) override;
void SetMouseSensitivity(int value) override;
void SetPrimaryButtonRight(bool right) override;
void SetMouseReverseScroll(bool enabled) override;
void SetTapToClickPaused(bool state) override;
void GetTouchDeviceStatus(GetTouchDeviceStatusReply reply) override;
void GetTouchEventLog(const base::FilePath& out_dir,
GetTouchEventLogReply reply) override;
void SetInternalTouchpadEnabled(bool enabled) override;
bool IsInternalTouchpadEnabled() const override;
void SetTouchscreensEnabled(bool enabled) override;
void SetInternalKeyboardFilter(bool enable_filter,
std::vector<DomCode> allowed_keys) override;
private:
// Post task to update settings.
void ScheduleUpdateDeviceSettings();
// Send settings update to input_device_factory_.
void UpdateDeviceSettings();
// Send caps lock update to input_device_factory_.
void UpdateCapsLockLed();
// Configuration that needs to be passed on to InputDeviceFactory.
InputDeviceSettingsEvdev input_device_settings_;
// Task to update config from input_device_settings_ is pending.
bool settings_update_pending_ = false;
// Factory for devices. Needed to update device config.
InputDeviceFactoryEvdevProxy* input_device_factory_ = nullptr;
// Keyboard state.
KeyboardEvdev* keyboard_;
// Mouse button map.
MouseButtonMapEvdev* button_map_;
// Device presence.
bool has_mouse_ = false;
bool has_touchpad_ = false;
// LED state.
bool caps_lock_led_state_ = false;
base::WeakPtrFactory<InputControllerEvdev> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(InputControllerEvdev);
};
} // namespace ui
#endif // UI_EVENTS_OZONE_EVDEV_INPUT_CONTROLLER_EVDEV_H_