Index: ui/events/ozone/evdev/event_factory_evdev.h |
diff --git a/ui/events/ozone/evdev/event_factory_evdev.h b/ui/events/ozone/evdev/event_factory_evdev.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..18a1f90c5b66be348eda1d0b551981607e050df1 |
--- /dev/null |
+++ b/ui/events/ozone/evdev/event_factory_evdev.h |
@@ -0,0 +1,144 @@ |
+// 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_EVENT_FACTORY_EVDEV_H_ |
+#define UI_EVENTS_OZONE_EVDEV_EVENT_FACTORY_EVDEV_H_ |
+ |
+#include "base/callback.h" |
+#include "base/compiler_specific.h" |
+#include "base/files/file_path.h" |
+#include "base/memory/ref_counted.h" |
+#include "base/task_runner.h" |
+#include "ui/events/ozone/device/device_event_observer.h" |
+#include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h" |
+#include "ui/events/ozone/evdev/event_modifiers_evdev.h" |
+#include "ui/events/ozone/evdev/event_thread_evdev.h" |
+#include "ui/events/ozone/evdev/events_ozone_evdev_export.h" |
+#include "ui/events/ozone/evdev/input_controller_evdev.h" |
+#include "ui/events/ozone/evdev/keyboard_evdev.h" |
+#include "ui/events/ozone/evdev/mouse_button_map_evdev.h" |
+#include "ui/events/platform/platform_event_source.h" |
+#include "ui/gfx/native_widget_types.h" |
+#include "ui/gfx/sequential_id_generator.h" |
+#include "ui/ozone/public/system_input_injector.h" |
+ |
+namespace gfx { |
+class PointF; |
+} // namespace gfx |
+ |
+namespace ui { |
+ |
+class CursorDelegateEvdev; |
+class DeviceManager; |
+class InputDeviceFactoryEvdev; |
+class InputDeviceFactoryEvdevProxy; |
+class SystemInputInjector; |
+enum class DomCode; |
+ |
+#if !defined(USE_EVDEV) |
+#error Missing dependency on ui/events/ozone:events_ozone_evdev |
+#endif |
+ |
+// Ozone events implementation for the Linux input subsystem ("evdev"). |
+// |
+// This is a UI thread object, but creates its own thread for I/O. See |
+// InputDeviceFactoryEvdev for the I/O thread part. |
+class EVENTS_OZONE_EVDEV_EXPORT EventFactoryEvdev : public DeviceEventObserver, |
+ public PlatformEventSource { |
+ public: |
+ EventFactoryEvdev(CursorDelegateEvdev* cursor, |
+ DeviceManager* device_manager, |
+ KeyboardLayoutEngine* keyboard_layout_engine); |
+ ~EventFactoryEvdev() override; |
+ |
+ // Initialize. Must be called with a valid message loop. |
+ void Init(); |
+ |
+ void WarpCursorTo(gfx::AcceleratedWidget widget, |
+ const gfx::PointF& location); |
+ |
+ scoped_ptr<SystemInputInjector> CreateSystemInputInjector(); |
+ |
+ InputControllerEvdev* input_controller() { return &input_controller_; } |
+ |
+ // User input events. |
+ void DispatchKeyEvent(const KeyEventParams& params); |
+ void DispatchMouseMoveEvent(const MouseMoveEventParams& params); |
+ void DispatchMouseButtonEvent(const MouseButtonEventParams& params); |
+ void DispatchMouseWheelEvent(const MouseWheelEventParams& params); |
+ void DispatchScrollEvent(const ScrollEventParams& params); |
+ void DispatchTouchEvent(const TouchEventParams& params); |
+ |
+ // Device lifecycle events. |
+ void DispatchKeyboardDevicesUpdated( |
+ const std::vector<KeyboardDevice>& devices); |
+ void DispatchTouchscreenDevicesUpdated( |
+ const std::vector<TouchscreenDevice>& devices); |
+ void DispatchMouseDevicesUpdated(const std::vector<InputDevice>& devices); |
+ void DispatchTouchpadDevicesUpdated(const std::vector<InputDevice>& devices); |
+ void DispatchDeviceListsComplete(); |
+ |
+ protected: |
+ // DeviceEventObserver overrides: |
+ // |
+ // Callback for device add (on UI thread). |
+ void OnDeviceEvent(const DeviceEvent& event) override; |
+ |
+ // PlatformEventSource: |
+ void OnDispatcherListChanged() override; |
+ |
+ private: |
+ // Dispatch event via PlatformEventSource. |
+ void DispatchUiEvent(ui::Event* event); |
+ |
+ int NextDeviceId(); |
+ |
+ // Device thread initialization. |
+ void StartThread(); |
+ void OnThreadStarted( |
+ scoped_ptr<InputDeviceFactoryEvdevProxy> input_device_factory); |
+ |
+ // Used to uniquely identify input devices. |
+ int last_device_id_ = 0; |
+ |
+ // Interface for scanning & monitoring input devices. |
+ DeviceManager* device_manager_; // Not owned. |
+ |
+ // Proxy for input device factory (manages device I/O objects). |
+ // The real object lives on a different thread. |
+ scoped_ptr<InputDeviceFactoryEvdevProxy> input_device_factory_proxy_; |
+ |
+ // Modifier key state (shift, ctrl, etc). |
+ EventModifiersEvdev modifiers_; |
+ |
+ // Mouse button map. |
+ MouseButtonMapEvdev button_map_; |
+ |
+ // Keyboard state. |
+ KeyboardEvdev keyboard_; |
+ |
+ // Cursor movement. |
+ CursorDelegateEvdev* cursor_; |
+ |
+ // Object for controlling input devices. |
+ InputControllerEvdev input_controller_; |
+ |
+ // Whether we've set up the device factory. |
+ bool initialized_ = false; |
+ |
+ // Thread for device I/O. |
+ EventThreadEvdev thread_; |
+ |
+ // Touch event id generator. |
+ SequentialIDGenerator touch_id_generator_; |
+ |
+ // Support weak pointers for attach & detach callbacks. |
+ base::WeakPtrFactory<EventFactoryEvdev> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(EventFactoryEvdev); |
+}; |
+ |
+} // namespace ui |
+ |
+#endif // UI_EVENTS_OZONE_EVDEV_EVENT_FACTORY_EVDEV_H_ |