• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 UI_BASE_X_ACTIVE_WINDOW_WATCHER_X_H_
6 #define UI_BASE_X_ACTIVE_WINDOW_WATCHER_X_H_
7 
8 #include "base/basictypes.h"
9 #include "base/observer_list.h"
10 #include "ui/base/ui_export.h"
11 #include "ui/base/x/x11_util.h"
12 
13 template <typename T> struct DefaultSingletonTraits;
14 
15 namespace ui {
16 
17 class ActiveWindowWatcherXObserver;
18 
19 namespace internal {
20 class RootWindowPropertyWatcherX;
21 }
22 
23 // This is a helper class that is used to keep track of which window the X
24 // window manager thinks is active. Add an Observer to listen for changes to
25 // the active window.
26 class UI_EXPORT ActiveWindowWatcherX {
27  public:
28   static ActiveWindowWatcherX* GetInstance();
29   static void AddObserver(ActiveWindowWatcherXObserver* observer);
30   static void RemoveObserver(ActiveWindowWatcherXObserver* observer);
31 
32   // Checks if the WM supports the active window property. Note that the return
33   // value can change, especially during system startup.
34   static bool WMSupportsActivation();
35 
36  private:
37   friend struct DefaultSingletonTraits<ActiveWindowWatcherX>;
38   friend class ui::internal::RootWindowPropertyWatcherX;
39 
40   ActiveWindowWatcherX();
41   ~ActiveWindowWatcherX();
42 
43   // Gets the atom for the default display for the property this class is
44   // watching for.
45   static Atom GetPropertyAtom();
46 
47   // Notify observers that the active window has changed.
48   static void Notify();
49 
50   // Instance method that implements Notify().
51   void NotifyActiveWindowChanged();
52 
53   ObserverList<ActiveWindowWatcherXObserver> observers_;
54 
55   DISALLOW_COPY_AND_ASSIGN(ActiveWindowWatcherX);
56 };
57 
58 }  // namespace ui
59 
60 #endif  // UI_BASE_X_ACTIVE_WINDOW_WATCHER_X_H_
61