// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef APP_ACTIVE_WINDOW_WATCHER_X_H_ #define APP_ACTIVE_WINDOW_WATCHER_X_H_ #pragma once #include #include "base/basictypes.h" #include "base/observer_list.h" #include "base/singleton.h" // This is a helper class that is used to keep track of which window the X // window manager thinks is active. Add an Observer to listener for changes to // the active window. class ActiveWindowWatcherX { public: class Observer { public: // |active_window| will be NULL if the active window isn't one of Chrome's. virtual void ActiveWindowChanged(GdkWindow* active_window) = 0; protected: virtual ~Observer() {} }; static void AddObserver(Observer* observer); static void RemoveObserver(Observer* observer); private: friend struct DefaultSingletonTraits; ActiveWindowWatcherX(); ~ActiveWindowWatcherX(); void Init(); // Sends a notification out through the NotificationService that the active // window has changed. void NotifyActiveWindowChanged(); // Callback for PropertyChange XEvents. static GdkFilterReturn OnWindowXEvent(GdkXEvent* xevent, GdkEvent* event, gpointer window_watcher); ObserverList observers_; DISALLOW_COPY_AND_ASSIGN(ActiveWindowWatcherX); }; #endif // APP_ACTIVE_WINDOW_WATCHER_X_H_