| Index: ui/events/ozone/evdev/event_factory_evdev.cc
|
| diff --git a/ui/events/ozone/evdev/event_factory_evdev.cc b/ui/events/ozone/evdev/event_factory_evdev.cc
|
| index a36d9e7118708cad33828dbb680adeababbc7a04..47b46b4d3d67e9f66128f8fc771ec84206eaa08b 100644
|
| --- a/ui/events/ozone/evdev/event_factory_evdev.cc
|
| +++ b/ui/events/ozone/evdev/event_factory_evdev.cc
|
| @@ -10,16 +10,13 @@
|
| #include "base/debug/trace_event.h"
|
| #include "base/stl_util.h"
|
| #include "base/task_runner.h"
|
| +#include "ui/events/ozone/device/device_event.h"
|
| +#include "ui/events/ozone/device/device_manager.h"
|
| #include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
|
| -#include "ui/events/ozone/evdev/device_manager_evdev.h"
|
| #include "ui/events/ozone/evdev/event_device_info.h"
|
| #include "ui/events/ozone/evdev/key_event_converter_evdev.h"
|
| #include "ui/events/ozone/evdev/touch_event_converter_evdev.h"
|
|
|
| -#if defined(USE_UDEV)
|
| -#include "ui/events/ozone/evdev/device_manager_udev.h"
|
| -#endif
|
| -
|
| #if defined(USE_EVDEV_GESTURES)
|
| #include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h"
|
| #include "ui/events/ozone/evdev/libgestures_glue/gesture_interpreter_libevdev_cros.h"
|
| @@ -133,7 +130,9 @@ void CloseInputDevice(const base::FilePath& path,
|
| } // namespace
|
|
|
| EventFactoryEvdev::EventFactoryEvdev()
|
| - : ui_task_runner_(base::MessageLoopProxy::current()),
|
| + : device_manager_(NULL),
|
| + has_started_processing_events_(false),
|
| + ui_task_runner_(base::MessageLoopProxy::current()),
|
| file_task_runner_(base::MessageLoopProxy::current()),
|
| cursor_(NULL),
|
| dispatch_callback_(
|
| @@ -141,8 +140,12 @@ EventFactoryEvdev::EventFactoryEvdev()
|
| base::Unretained(this))),
|
| weak_ptr_factory_(this) {}
|
|
|
| -EventFactoryEvdev::EventFactoryEvdev(CursorDelegateEvdev* cursor)
|
| - : ui_task_runner_(base::MessageLoopProxy::current()),
|
| +EventFactoryEvdev::EventFactoryEvdev(
|
| + CursorDelegateEvdev* cursor,
|
| + DeviceManager* device_manager)
|
| + : device_manager_(device_manager),
|
| + has_started_processing_events_(false),
|
| + ui_task_runner_(base::MessageLoopProxy::current()),
|
| file_task_runner_(base::MessageLoopProxy::current()),
|
| cursor_(cursor),
|
| dispatch_callback_(
|
| @@ -172,21 +175,35 @@ void EventFactoryEvdev::AttachInputDevice(
|
| converters_[path]->Start();
|
| }
|
|
|
| -void EventFactoryEvdev::OnDeviceAdded(const base::FilePath& path) {
|
| - TRACE_EVENT1("ozone", "OnDeviceAdded", "path", path.value());
|
| -
|
| - // Dispatch task to open on FILE thread, since open may block.
|
| - file_task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&OpenInputDevice,
|
| - path,
|
| - &modifiers_,
|
| - cursor_,
|
| - ui_task_runner_,
|
| - dispatch_callback_,
|
| - base::Bind(&EventFactoryEvdev::AttachInputDevice,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - path)));
|
| +void EventFactoryEvdev::OnDeviceEvent(const DeviceEvent& event) {
|
| + if (event.device_type() != DeviceEvent::INPUT)
|
| + return;
|
| +
|
| + switch (event.action_type()) {
|
| + case DeviceEvent::ADD:
|
| + case DeviceEvent::CHANGE: {
|
| + TRACE_EVENT1("ozone", "OnDeviceAdded", "path", event.path().value());
|
| +
|
| + // Dispatch task to open on FILE thread, since open may block.
|
| + file_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&OpenInputDevice,
|
| + event.path(),
|
| + &modifiers_,
|
| + cursor_,
|
| + ui_task_runner_,
|
| + dispatch_callback_,
|
| + base::Bind(&EventFactoryEvdev::AttachInputDevice,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + event.path())));
|
| + }
|
| + break;
|
| + case DeviceEvent::REMOVE: {
|
| + TRACE_EVENT1("ozone", "OnDeviceRemoved", "path", event.path().value());
|
| + DetachInputDevice(event.path());
|
| + }
|
| + break;
|
| + }
|
| }
|
|
|
| void EventFactoryEvdev::DetachInputDevice(const base::FilePath& path) {
|
| @@ -209,26 +226,15 @@ void EventFactoryEvdev::DetachInputDevice(const base::FilePath& path) {
|
| }
|
| }
|
|
|
| -void EventFactoryEvdev::OnDeviceRemoved(const base::FilePath& path) {
|
| - TRACE_EVENT1("ozone", "OnDeviceRemoved", "path", path.value());
|
| - DetachInputDevice(path);
|
| -}
|
| -
|
| void EventFactoryEvdev::StartProcessingEvents() {
|
| CHECK(ui_task_runner_->RunsTasksOnCurrentThread());
|
|
|
| -#if defined(USE_UDEV)
|
| - // Scan for input devices using udev.
|
| - device_manager_ = CreateDeviceManagerUdev();
|
| -#else
|
| - // No udev support. Scan devices manually in /dev/input.
|
| - device_manager_ = CreateDeviceManagerManual();
|
| -#endif
|
| -
|
| - // Scan & monitor devices.
|
| - device_manager_->ScanAndStartMonitoring(
|
| - base::Bind(&EventFactoryEvdev::OnDeviceAdded, base::Unretained(this)),
|
| - base::Bind(&EventFactoryEvdev::OnDeviceRemoved, base::Unretained(this)));
|
| + if (device_manager_ && !has_started_processing_events_) {
|
| + has_started_processing_events_ = true;
|
| + // Scan & monitor devices.
|
| + device_manager_->AddObserver(this);
|
| + device_manager_->ScanDevices(this);
|
| + }
|
| }
|
|
|
| void EventFactoryEvdev::SetFileTaskRunner(
|
|
|