Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / global_shortcut_listener_x11.h
1 // Copyright 2013 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_EXTENSIONS_GLOBAL_SHORTCUT_LISTENER_X11_H_
6 #define CHROME_BROWSER_EXTENSIONS_GLOBAL_SHORTCUT_LISTENER_X11_H_
7
8 #include <X11/Xlib.h>
9 #include <set>
10
11 #include "chrome/browser/extensions/global_shortcut_listener.h"
12 #include "ui/events/platform/platform_event_dispatcher.h"
13
14 namespace extensions {
15
16 // X11-specific implementation of the GlobalShortcutListener class that
17 // listens for global shortcuts. Handles basic keyboard intercepting and
18 // forwards its output to the base class for processing.
19 class GlobalShortcutListenerX11 : public GlobalShortcutListener,
20                                   public ui::PlatformEventDispatcher {
21  public:
22   GlobalShortcutListenerX11();
23   virtual ~GlobalShortcutListenerX11();
24
25   // ui::PlatformEventDispatcher implementation.
26   virtual bool CanDispatchEvent(const ui::PlatformEvent& event) OVERRIDE;
27   virtual uint32_t DispatchEvent(const ui::PlatformEvent& event) OVERRIDE;
28
29  private:
30   // GlobalShortcutListener implementation.
31   virtual void StartListening() OVERRIDE;
32   virtual void StopListening() OVERRIDE;
33   virtual bool RegisterAcceleratorImpl(
34       const ui::Accelerator& accelerator) OVERRIDE;
35   virtual void UnregisterAcceleratorImpl(
36       const ui::Accelerator& accelerator) OVERRIDE;
37
38   // Invoked when a global shortcut is pressed.
39   void OnXKeyPressEvent(::XEvent* x_event);
40
41   // Whether this object is listening for global shortcuts.
42   bool is_listening_;
43
44   // The x11 default display and the native root window.
45   ::Display* x_display_;
46   ::Window x_root_window_;
47
48   // A set of registered accelerators.
49   typedef std::set<ui::Accelerator> RegisteredHotKeys;
50   RegisteredHotKeys registered_hot_keys_;
51
52   DISALLOW_COPY_AND_ASSIGN(GlobalShortcutListenerX11);
53 };
54
55 }  // namespace extensions
56
57 #endif  // CHROME_BROWSER_EXTENSIONS_GLOBAL_SHORTCUT_LISTENER_X11_H_