Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / events / xinput_hierarchy_changed_event_listener.h
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 #ifndef CHROME_BROWSER_CHROMEOS_EVENTS_XINPUT_HIERARCHY_CHANGED_EVENT_LISTENER_H_
6 #define CHROME_BROWSER_CHROMEOS_EVENTS_XINPUT_HIERARCHY_CHANGED_EVENT_LISTENER_H_
7
8 #include "base/memory/singleton.h"
9 #include "base/observer_list.h"
10 #include "chrome/browser/chromeos/device_hierarchy_observer.h"
11 #include "ui/events/platform/platform_event_observer.h"
12
13 typedef union _XEvent XEvent;
14
15 namespace chromeos {
16
17 // XInputHierarchyChangedEventListener listens for an XI_HierarchyChanged event,
18 // which is sent to Chrome when X detects a system or USB keyboard (or mouse),
19 // then tells X to change the current XKB keyboard layout. Start by just calling
20 // instance() to get it going.
21 class XInputHierarchyChangedEventListener : public ui::PlatformEventObserver {
22  public:
23   static XInputHierarchyChangedEventListener* GetInstance();
24
25   void Stop();
26
27   void AddObserver(DeviceHierarchyObserver* observer);
28   void RemoveObserver(DeviceHierarchyObserver* observer);
29
30  private:
31   // Defines the delete on exit Singleton traits we like.  Best to have this
32   // and const/dest private as recommended for Singletons.
33   friend struct DefaultSingletonTraits<XInputHierarchyChangedEventListener>;
34
35   XInputHierarchyChangedEventListener();
36   virtual ~XInputHierarchyChangedEventListener();
37
38   // ui::PlatformEventObserver:
39   virtual void WillProcessEvent(const ui::PlatformEvent& event) OVERRIDE;
40   virtual void DidProcessEvent(const ui::PlatformEvent& event) OVERRIDE;
41
42   // Returns true if the event was processed, false otherwise.
43   void ProcessedXEvent(XEvent* xevent);
44
45   // Notify observers that a device has been added/removed.
46   void NotifyDeviceHierarchyChanged();
47
48   bool stopped_;
49
50   ObserverList<DeviceHierarchyObserver> observer_list_;
51
52   DISALLOW_COPY_AND_ASSIGN(XInputHierarchyChangedEventListener);
53 };
54
55 }  // namespace chromeos
56
57 #endif  // CHROME_BROWSER_CHROMEOS_EVENTS_XINPUT_HIERARCHY_CHANGED_EVENT_LISTENER_H_