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_WORK_AREA_WATCHER_X_H_
      6 #define UI_BASE_X_WORK_AREA_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 WorkAreaWatcherObserver;
     18 
     19 namespace internal {
     20 class RootWindowPropertyWatcherX;
     21 }
     22 
     23 // This is a helper class that is used to keep track of changes to work area.
     24 // Add an observer to track changes.
     25 class UI_EXPORT WorkAreaWatcherX {
     26  public:
     27   static WorkAreaWatcherX* GetInstance();
     28   static void AddObserver(WorkAreaWatcherObserver* observer);
     29   static void RemoveObserver(WorkAreaWatcherObserver* observer);
     30 
     31  private:
     32   friend struct DefaultSingletonTraits<WorkAreaWatcherX>;
     33   friend class ui::internal::RootWindowPropertyWatcherX;
     34 
     35   WorkAreaWatcherX();
     36   ~WorkAreaWatcherX();
     37 
     38   // Gets the atom for the default display for the property this class is
     39   // watching for.
     40   static Atom GetPropertyAtom();
     41 
     42   // Notify observers that the work area has changed.
     43   static void Notify();
     44 
     45   // Instance method that implements Notify().
     46   void NotifyWorkAreaChanged();
     47 
     48   ObserverList<WorkAreaWatcherObserver> observers_;
     49 
     50   DISALLOW_COPY_AND_ASSIGN(WorkAreaWatcherX);
     51 };
     52 
     53 }  // namespace ui
     54 
     55 #endif  // UI_BASE_X_WORK_AREA_WATCHER_X_H_
     56