| // 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/event_converter_evdev.h" | 
 | #include "ui/events/ozone/evdev/event_modifiers_evdev.h" | 
 | #include "ui/events/ozone/evdev/events_ozone_evdev_export.h" | 
 | #include "ui/events/ozone/evdev/keyboard_evdev.h" | 
 | #include "ui/events/platform/platform_event_source.h" | 
 | #include "ui/gfx/native_widget_types.h" | 
 |  | 
 | namespace gfx { | 
 | class PointF; | 
 | }  // namespace gfx | 
 |  | 
 | namespace ui { | 
 |  | 
 | class CursorDelegateEvdev; | 
 | class DeviceManager; | 
 |  | 
 | #if defined(USE_EVDEV_GESTURES) | 
 | class GesturePropertyProvider; | 
 | #endif | 
 |  | 
 | // Ozone events implementation for the Linux input subsystem ("evdev"). | 
 | class EVENTS_OZONE_EVDEV_EXPORT EventFactoryEvdev : public DeviceEventObserver, | 
 |                                                     public PlatformEventSource { | 
 |  public: | 
 |   EventFactoryEvdev(CursorDelegateEvdev* cursor, | 
 |                     DeviceManager* device_manager); | 
 |   virtual ~EventFactoryEvdev(); | 
 |  | 
 |   void WarpCursorTo(gfx::AcceleratedWidget widget, | 
 |                     const gfx::PointF& location); | 
 |  | 
 |  private: | 
 |   // Post a task to dispatch an event. | 
 |   void PostUiEvent(scoped_ptr<Event> event); | 
 |  | 
 |   // Dispatch event via PlatformEventSource. | 
 |   void DispatchUiEventTask(scoped_ptr<Event> event); | 
 |  | 
 |   // Open device at path & starting processing events (on UI thread). | 
 |   void AttachInputDevice(scoped_ptr<EventConverterEvdev> converter); | 
 |  | 
 |   // Close device at path (on UI thread). | 
 |   void DetachInputDevice(const base::FilePath& file_path); | 
 |  | 
 |   void NotifyHotplugEventObserver(const EventConverterEvdev& converter); | 
 |  | 
 |   int NextDeviceId(); | 
 |  | 
 |   // DeviceEventObserver overrides: | 
 |   // | 
 |   // Callback for device add (on UI thread). | 
 |   virtual void OnDeviceEvent(const DeviceEvent& event) override; | 
 |  | 
 |   // PlatformEventSource: | 
 |   virtual void OnDispatcherListChanged() override; | 
 |  | 
 |   // Owned per-device event converters (by path). | 
 |   std::map<base::FilePath, EventConverterEvdev*> converters_; | 
 |  | 
 |   // Used to uniquely identify input devices. | 
 |   int last_device_id_; | 
 |  | 
 |   // Interface for scanning & monitoring input devices. | 
 |   DeviceManager* device_manager_;  // Not owned. | 
 |  | 
 |   // Task runner for event dispatch. | 
 |   scoped_refptr<base::TaskRunner> ui_task_runner_; | 
 |  | 
 |   // Dispatch callback for events. | 
 |   EventDispatchCallback dispatch_callback_; | 
 |  | 
 |   // Modifier key state (shift, ctrl, etc). | 
 |   EventModifiersEvdev modifiers_; | 
 |  | 
 |   // Keyboard state. | 
 |   KeyboardEvdev keyboard_; | 
 |  | 
 |   // Cursor movement. | 
 |   CursorDelegateEvdev* cursor_; | 
 |  | 
 | #if defined(USE_EVDEV_GESTURES) | 
 |   // Gesture library property provider (used by touchpads/mice). | 
 |   scoped_ptr<GesturePropertyProvider> gesture_property_provider_; | 
 | #endif | 
 |  | 
 |   // 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_ |