Commit 6f440efc authored by pkotwicz's avatar pkotwicz Committed by Commit bot

Make PointerDeviceObserver use ui::InputDeviceEventObserver on X11

This CL:
- Makes PointerDeviceObserver use ui::InputDeviceEventObserver on X11 (it is
  already used on Ozone)
- Makes X11HotplugEventObserver notify ui::DeviceDataManager when a mouse /
  touchpad is plugged in / unplugged
- Removes DeviceHierarchyObserver

BUG=440503
TEST=Manual

Review URL: https://codereview.chromium.org/946173002

Cr-Commit-Position: refs/heads/master@{#318997}
parent cc241280
// Copyright (c) 2012 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 CHROME_BROWSER_CHROMEOS_DEVICE_HIERARCHY_OBSERVER_H_
#define CHROME_BROWSER_CHROMEOS_DEVICE_HIERARCHY_OBSERVER_H_
namespace chromeos {
// Observers receive notifications when a device has been added/removed.
class DeviceHierarchyObserver {
public:
virtual void DeviceHierarchyChanged() = 0;
// Called when a new device (e.g. an external USB keyboard) is attached or
// detached.
virtual void DeviceAdded(int device_id) = 0;
virtual void DeviceRemoved(int device_id) = 0;
protected:
virtual ~DeviceHierarchyObserver() {}
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_DEVICE_HIERARCHY_OBSERVER_H_
...@@ -16,9 +16,7 @@ namespace chromeos { ...@@ -16,9 +16,7 @@ namespace chromeos {
namespace { namespace {
// Checks the |event| and asynchronously sets the XKB layout when necessary. // Checks the |event| and asynchronously sets the XKB layout when necessary.
void HandleHierarchyChangedEvent( void HandleHierarchyChangedEvent(XIHierarchyEvent* event) {
XIHierarchyEvent* event,
ObserverList<DeviceHierarchyObserver>* observer_list) {
if (!(event->flags & (XISlaveAdded | XISlaveRemoved))) if (!(event->flags & (XISlaveAdded | XISlaveRemoved)))
return; return;
...@@ -26,15 +24,8 @@ void HandleHierarchyChangedEvent( ...@@ -26,15 +24,8 @@ void HandleHierarchyChangedEvent(
for (int i = 0; i < event->num_info; ++i) { for (int i = 0; i < event->num_info; ++i) {
XIHierarchyInfo* info = &event->info[i]; XIHierarchyInfo* info = &event->info[i];
if ((info->flags & XISlaveAdded) && (info->use == XIFloatingSlave)) { if ((info->flags & XISlaveAdded) && (info->use == XIFloatingSlave)) {
FOR_EACH_OBSERVER(DeviceHierarchyObserver,
*observer_list,
DeviceAdded(info->deviceid));
update_keyboard_status = true; update_keyboard_status = true;
} else if (info->flags & XISlaveRemoved) { break;
// Can't check info->use here; it appears to always be 0.
FOR_EACH_OBSERVER(DeviceHierarchyObserver,
*observer_list,
DeviceRemoved(info->deviceid));
} }
} }
...@@ -73,16 +64,6 @@ void XInputHierarchyChangedEventListener::Stop() { ...@@ -73,16 +64,6 @@ void XInputHierarchyChangedEventListener::Stop() {
stopped_ = true; stopped_ = true;
} }
void XInputHierarchyChangedEventListener::AddObserver(
DeviceHierarchyObserver* observer) {
observer_list_.AddObserver(observer);
}
void XInputHierarchyChangedEventListener::RemoveObserver(
DeviceHierarchyObserver* observer) {
observer_list_.RemoveObserver(observer);
}
void XInputHierarchyChangedEventListener::WillProcessEvent( void XInputHierarchyChangedEventListener::WillProcessEvent(
const ui::PlatformEvent& event) { const ui::PlatformEvent& event) {
ProcessedXEvent(event); ProcessedXEvent(event);
...@@ -100,16 +81,8 @@ void XInputHierarchyChangedEventListener::ProcessedXEvent(XEvent* xevent) { ...@@ -100,16 +81,8 @@ void XInputHierarchyChangedEventListener::ProcessedXEvent(XEvent* xevent) {
if (cookie->evtype == XI_HierarchyChanged) { if (cookie->evtype == XI_HierarchyChanged) {
XIHierarchyEvent* event = static_cast<XIHierarchyEvent*>(cookie->data); XIHierarchyEvent* event = static_cast<XIHierarchyEvent*>(cookie->data);
HandleHierarchyChangedEvent(event, &observer_list_); HandleHierarchyChangedEvent(event);
if (event->flags & XIDeviceEnabled || event->flags & XIDeviceDisabled)
NotifyDeviceHierarchyChanged();
} }
} }
void XInputHierarchyChangedEventListener::NotifyDeviceHierarchyChanged() {
FOR_EACH_OBSERVER(DeviceHierarchyObserver,
observer_list_,
DeviceHierarchyChanged());
}
} // namespace chromeos } // namespace chromeos
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "base/memory/singleton.h" #include "base/memory/singleton.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "chrome/browser/chromeos/device_hierarchy_observer.h"
#include "ui/events/platform/platform_event_observer.h" #include "ui/events/platform/platform_event_observer.h"
typedef union _XEvent XEvent; typedef union _XEvent XEvent;
...@@ -24,9 +23,6 @@ class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver { ...@@ -24,9 +23,6 @@ class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver {
void Stop(); void Stop();
void AddObserver(DeviceHierarchyObserver* observer);
void RemoveObserver(DeviceHierarchyObserver* observer);
private: private:
// Defines the delete on exit Singleton traits we like. Best to have this // Defines the delete on exit Singleton traits we like. Best to have this
// and const/dest private as recommended for Singletons. // and const/dest private as recommended for Singletons.
...@@ -42,13 +38,8 @@ class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver { ...@@ -42,13 +38,8 @@ class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver {
// Returns true if the event was processed, false otherwise. // Returns true if the event was processed, false otherwise.
void ProcessedXEvent(XEvent* xevent); void ProcessedXEvent(XEvent* xevent);
// Notify observers that a device has been added/removed.
void NotifyDeviceHierarchyChanged();
bool stopped_; bool stopped_;
ObserverList<DeviceHierarchyObserver> observer_list_;
DISALLOW_COPY_AND_ASSIGN(XInputHierarchyChangedEventListener); DISALLOW_COPY_AND_ASSIGN(XInputHierarchyChangedEventListener);
}; };
......
...@@ -11,10 +11,6 @@ ...@@ -11,10 +11,6 @@
#include "content/public/browser/browser_thread.h" #include "content/public/browser/browser_thread.h"
#include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/device_data_manager.h"
#if defined(USE_X11)
#include "chrome/browser/chromeos/events/xinput_hierarchy_changed_event_listener.h"
#endif
using content::BrowserThread; using content::BrowserThread;
namespace chromeos { namespace chromeos {
...@@ -25,21 +21,11 @@ PointerDeviceObserver::PointerDeviceObserver() ...@@ -25,21 +21,11 @@ PointerDeviceObserver::PointerDeviceObserver()
} }
PointerDeviceObserver::~PointerDeviceObserver() { PointerDeviceObserver::~PointerDeviceObserver() {
#if defined(USE_X11)
XInputHierarchyChangedEventListener::GetInstance()
->RemoveObserver(this);
#elif defined(USE_OZONE)
ui::DeviceDataManager::GetInstance()->RemoveObserver(this); ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
#endif
} }
void PointerDeviceObserver::Init() { void PointerDeviceObserver::Init() {
#if defined(USE_X11)
XInputHierarchyChangedEventListener::GetInstance()
->AddObserver(this);
#elif defined(USE_OZONE)
ui::DeviceDataManager::GetInstance()->AddObserver(this); ui::DeviceDataManager::GetInstance()->AddObserver(this);
#endif
} }
void PointerDeviceObserver::CheckDevices() { void PointerDeviceObserver::CheckDevices() {
...@@ -55,10 +41,6 @@ void PointerDeviceObserver::RemoveObserver(Observer* observer) { ...@@ -55,10 +41,6 @@ void PointerDeviceObserver::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer); observers_.RemoveObserver(observer);
} }
void PointerDeviceObserver::DeviceHierarchyChanged() {
CheckDevices();
}
void PointerDeviceObserver::OnMouseDeviceConfigurationChanged() { void PointerDeviceObserver::OnMouseDeviceConfigurationChanged() {
CheckDevices(); CheckDevices();
} }
......
...@@ -7,14 +7,12 @@ ...@@ -7,14 +7,12 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "chrome/browser/chromeos/device_hierarchy_observer.h"
#include "ui/events/devices/input_device_event_observer.h" #include "ui/events/devices/input_device_event_observer.h"
namespace chromeos { namespace chromeos {
namespace system { namespace system {
class PointerDeviceObserver : public DeviceHierarchyObserver, class PointerDeviceObserver : public ui::InputDeviceEventObserver {
public ui::InputDeviceEventObserver {
public: public:
PointerDeviceObserver(); PointerDeviceObserver();
~PointerDeviceObserver() override; ~PointerDeviceObserver() override;
...@@ -38,11 +36,6 @@ class PointerDeviceObserver : public DeviceHierarchyObserver, ...@@ -38,11 +36,6 @@ class PointerDeviceObserver : public DeviceHierarchyObserver,
void RemoveObserver(Observer* observer); void RemoveObserver(Observer* observer);
private: private:
// DeviceHierarchyObserver:
void DeviceHierarchyChanged() override;
void DeviceAdded(int device_id) override {}
void DeviceRemoved(int device_id) override {}
// InputDeviceEventObserver: // InputDeviceEventObserver:
void OnMouseDeviceConfigurationChanged() override; void OnMouseDeviceConfigurationChanged() override;
void OnTouchpadDeviceConfigurationChanged() override; void OnTouchpadDeviceConfigurationChanged() override;
......
...@@ -85,7 +85,6 @@ ...@@ -85,7 +85,6 @@
'browser/chromeos/dbus/screen_lock_service_provider.h', 'browser/chromeos/dbus/screen_lock_service_provider.h',
'browser/chromeos/device/input_service_proxy.cc', 'browser/chromeos/device/input_service_proxy.cc',
'browser/chromeos/device/input_service_proxy.h', 'browser/chromeos/device/input_service_proxy.h',
'browser/chromeos/device_hierarchy_observer.h',
'browser/chromeos/device_uma.cc', 'browser/chromeos/device_uma.cc',
'browser/chromeos/device_uma.h', 'browser/chromeos/device_uma.h',
'browser/chromeos/display/display_configuration_observer.cc', 'browser/chromeos/display/display_configuration_observer.cc',
......
...@@ -151,6 +151,14 @@ void DeviceDataManager::OnKeyboardDevicesUpdated( ...@@ -151,6 +151,14 @@ void DeviceDataManager::OnKeyboardDevicesUpdated(
void DeviceDataManager::OnMouseDevicesUpdated( void DeviceDataManager::OnMouseDevicesUpdated(
const std::vector<InputDevice>& devices) { const std::vector<InputDevice>& devices) {
if (devices.size() == mouse_devices_.size() &&
std::equal(devices.begin(),
devices.end(),
mouse_devices_.begin(),
InputDeviceEquals)) {
return;
}
mouse_devices_ = devices;
FOR_EACH_OBSERVER(InputDeviceEventObserver, FOR_EACH_OBSERVER(InputDeviceEventObserver,
observers_, observers_,
OnMouseDeviceConfigurationChanged()); OnMouseDeviceConfigurationChanged());
...@@ -158,6 +166,14 @@ void DeviceDataManager::OnMouseDevicesUpdated( ...@@ -158,6 +166,14 @@ void DeviceDataManager::OnMouseDevicesUpdated(
void DeviceDataManager::OnTouchpadDevicesUpdated( void DeviceDataManager::OnTouchpadDevicesUpdated(
const std::vector<InputDevice>& devices) { const std::vector<InputDevice>& devices) {
if (devices.size() == touchpad_devices_.size() &&
std::equal(devices.begin(),
devices.end(),
touchpad_devices_.begin(),
InputDeviceEquals)) {
return;
}
touchpad_devices_ = devices;
FOR_EACH_OBSERVER(InputDeviceEventObserver, FOR_EACH_OBSERVER(InputDeviceEventObserver,
observers_, observers_,
OnTouchpadDeviceConfigurationChanged()); OnTouchpadDeviceConfigurationChanged());
......
...@@ -83,6 +83,8 @@ class EVENTS_DEVICES_EXPORT DeviceDataManager ...@@ -83,6 +83,8 @@ class EVENTS_DEVICES_EXPORT DeviceDataManager
std::vector<TouchscreenDevice> touchscreen_devices_; std::vector<TouchscreenDevice> touchscreen_devices_;
std::vector<KeyboardDevice> keyboard_devices_; std::vector<KeyboardDevice> keyboard_devices_;
std::vector<InputDevice> mouse_devices_;
std::vector<InputDevice> touchpad_devices_;
ObserverList<InputDeviceEventObserver> observers_; ObserverList<InputDeviceEventObserver> observers_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment