Home | History | Annotate | Download | only in system
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/system/pointer_device_observer.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "base/bind.h"
      9 #include "base/bind_helpers.h"
     10 #include "chrome/browser/chromeos/system/input_device_settings.h"
     11 #include "content/public/browser/browser_thread.h"
     12 
     13 #if defined(USE_X11)
     14 #include "chrome/browser/chromeos/events/xinput_hierarchy_changed_event_listener.h"
     15 #endif
     16 
     17 using content::BrowserThread;
     18 
     19 namespace chromeos {
     20 namespace system {
     21 
     22 PointerDeviceObserver::PointerDeviceObserver()
     23     : weak_factory_(this) {
     24 }
     25 
     26 PointerDeviceObserver::~PointerDeviceObserver() {
     27 #if defined(USE_X11)
     28   XInputHierarchyChangedEventListener::GetInstance()
     29       ->RemoveObserver(this);
     30 #endif
     31 }
     32 
     33 void PointerDeviceObserver::Init() {
     34 #if defined(USE_X11)
     35   XInputHierarchyChangedEventListener::GetInstance()
     36       ->AddObserver(this);
     37 #endif
     38 }
     39 
     40 void PointerDeviceObserver::CheckDevices() {
     41   CheckMouseExists();
     42   CheckTouchpadExists();
     43 }
     44 
     45 void PointerDeviceObserver::AddObserver(Observer* observer) {
     46   observers_.AddObserver(observer);
     47 }
     48 
     49 void PointerDeviceObserver::RemoveObserver(Observer* observer) {
     50   observers_.RemoveObserver(observer);
     51 }
     52 
     53 void PointerDeviceObserver::DeviceHierarchyChanged() {
     54   CheckDevices();
     55 }
     56 
     57 void PointerDeviceObserver::CheckTouchpadExists() {
     58   InputDeviceSettings::Get()->TouchpadExists(
     59       base::Bind(&PointerDeviceObserver::OnTouchpadExists,
     60                  weak_factory_.GetWeakPtr()));
     61 }
     62 
     63 void PointerDeviceObserver::CheckMouseExists() {
     64   InputDeviceSettings::Get()->MouseExists(
     65       base::Bind(&PointerDeviceObserver::OnMouseExists,
     66                  weak_factory_.GetWeakPtr()));
     67 }
     68 
     69 void PointerDeviceObserver::OnTouchpadExists(bool exists) {
     70   FOR_EACH_OBSERVER(Observer, observers_, TouchpadExists(exists));
     71 }
     72 
     73 void PointerDeviceObserver::OnMouseExists(bool exists) {
     74   FOR_EACH_OBSERVER(Observer, observers_, MouseExists(exists));
     75 }
     76 
     77 PointerDeviceObserver::Observer::~Observer() {
     78 }
     79 
     80 }  // namespace system
     81 }  // namespace chromeos
     82