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 {
namespace {
// Checks the |event| and asynchronously sets the XKB layout when necessary.
void HandleHierarchyChangedEvent(
XIHierarchyEvent* event,
ObserverList<DeviceHierarchyObserver>* observer_list) {
void HandleHierarchyChangedEvent(XIHierarchyEvent* event) {
if (!(event->flags & (XISlaveAdded | XISlaveRemoved)))
return;
......@@ -26,15 +24,8 @@ void HandleHierarchyChangedEvent(
for (int i = 0; i < event->num_info; ++i) {
XIHierarchyInfo* info = &event->info[i];
if ((info->flags & XISlaveAdded) && (info->use == XIFloatingSlave)) {
FOR_EACH_OBSERVER(DeviceHierarchyObserver,
*observer_list,
DeviceAdded(info->deviceid));
update_keyboard_status = true;
} else if (info->flags & XISlaveRemoved) {
// Can't check info->use here; it appears to always be 0.
FOR_EACH_OBSERVER(DeviceHierarchyObserver,
*observer_list,
DeviceRemoved(info->deviceid));
break;
}
}
......@@ -73,16 +64,6 @@ void XInputHierarchyChangedEventListener::Stop() {
stopped_ = true;
}
void XInputHierarchyChangedEventListener::AddObserver(
DeviceHierarchyObserver* observer) {
observer_list_.AddObserver(observer);
}
void XInputHierarchyChangedEventListener::RemoveObserver(
DeviceHierarchyObserver* observer) {
observer_list_.RemoveObserver(observer);
}
void XInputHierarchyChangedEventListener::WillProcessEvent(
const ui::PlatformEvent& event) {
ProcessedXEvent(event);
......@@ -100,16 +81,8 @@ void XInputHierarchyChangedEventListener::ProcessedXEvent(XEvent* xevent) {
if (cookie->evtype == XI_HierarchyChanged) {
XIHierarchyEvent* event = static_cast<XIHierarchyEvent*>(cookie->data);
HandleHierarchyChangedEvent(event, &observer_list_);
if (event->flags & XIDeviceEnabled || event->flags & XIDeviceDisabled)
NotifyDeviceHierarchyChanged();
HandleHierarchyChangedEvent(event);
}
}
void XInputHierarchyChangedEventListener::NotifyDeviceHierarchyChanged() {
FOR_EACH_OBSERVER(DeviceHierarchyObserver,
observer_list_,
DeviceHierarchyChanged());
}
} // namespace chromeos
......@@ -7,7 +7,6 @@
#include "base/memory/singleton.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/device_hierarchy_observer.h"
#include "ui/events/platform/platform_event_observer.h"
typedef union _XEvent XEvent;
......@@ -24,9 +23,6 @@ class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver {
void Stop();
void AddObserver(DeviceHierarchyObserver* observer);
void RemoveObserver(DeviceHierarchyObserver* observer);
private:
// Defines the delete on exit Singleton traits we like. Best to have this
// and const/dest private as recommended for Singletons.
......@@ -42,13 +38,8 @@ class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver {
// Returns true if the event was processed, false otherwise.
void ProcessedXEvent(XEvent* xevent);
// Notify observers that a device has been added/removed.
void NotifyDeviceHierarchyChanged();
bool stopped_;
ObserverList<DeviceHierarchyObserver> observer_list_;
DISALLOW_COPY_AND_ASSIGN(XInputHierarchyChangedEventListener);
};
......
......@@ -11,10 +11,6 @@
#include "content/public/browser/browser_thread.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;
namespace chromeos {
......@@ -25,21 +21,11 @@ PointerDeviceObserver::PointerDeviceObserver()
}
PointerDeviceObserver::~PointerDeviceObserver() {
#if defined(USE_X11)
XInputHierarchyChangedEventListener::GetInstance()
->RemoveObserver(this);
#elif defined(USE_OZONE)
ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
#endif
}
void PointerDeviceObserver::Init() {
#if defined(USE_X11)
XInputHierarchyChangedEventListener::GetInstance()
->AddObserver(this);
#elif defined(USE_OZONE)
ui::DeviceDataManager::GetInstance()->AddObserver(this);
#endif
}
void PointerDeviceObserver::CheckDevices() {
......@@ -55,10 +41,6 @@ void PointerDeviceObserver::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void PointerDeviceObserver::DeviceHierarchyChanged() {
CheckDevices();
}
void PointerDeviceObserver::OnMouseDeviceConfigurationChanged() {
CheckDevices();
}
......
......@@ -7,14 +7,12 @@
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "chrome/browser/chromeos/device_hierarchy_observer.h"
#include "ui/events/devices/input_device_event_observer.h"
namespace chromeos {
namespace system {
class PointerDeviceObserver : public DeviceHierarchyObserver,
public ui::InputDeviceEventObserver {
class PointerDeviceObserver : public ui::InputDeviceEventObserver {
public:
PointerDeviceObserver();
~PointerDeviceObserver() override;
......@@ -38,11 +36,6 @@ class PointerDeviceObserver : public DeviceHierarchyObserver,
void RemoveObserver(Observer* observer);
private:
// DeviceHierarchyObserver:
void DeviceHierarchyChanged() override;
void DeviceAdded(int device_id) override {}
void DeviceRemoved(int device_id) override {}
// InputDeviceEventObserver:
void OnMouseDeviceConfigurationChanged() override;
void OnTouchpadDeviceConfigurationChanged() override;
......
......@@ -85,7 +85,6 @@
'browser/chromeos/dbus/screen_lock_service_provider.h',
'browser/chromeos/device/input_service_proxy.cc',
'browser/chromeos/device/input_service_proxy.h',
'browser/chromeos/device_hierarchy_observer.h',
'browser/chromeos/device_uma.cc',
'browser/chromeos/device_uma.h',
'browser/chromeos/display/display_configuration_observer.cc',
......
......@@ -151,6 +151,14 @@ void DeviceDataManager::OnKeyboardDevicesUpdated(
void DeviceDataManager::OnMouseDevicesUpdated(
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,
observers_,
OnMouseDeviceConfigurationChanged());
......@@ -158,6 +166,14 @@ void DeviceDataManager::OnMouseDevicesUpdated(
void DeviceDataManager::OnTouchpadDevicesUpdated(
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,
observers_,
OnTouchpadDeviceConfigurationChanged());
......
......@@ -83,6 +83,8 @@ class EVENTS_DEVICES_EXPORT DeviceDataManager
std::vector<TouchscreenDevice> touchscreen_devices_;
std::vector<KeyboardDevice> keyboard_devices_;
std::vector<InputDevice> mouse_devices_;
std::vector<InputDevice> touchpad_devices_;
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