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