Home | History | Annotate | Download | only in x
      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