1// Copyright (c) 2011 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 CHROME_BROWSER_CHROMEOS_WM_MESSAGE_LISTENER_H_ 6#define CHROME_BROWSER_CHROMEOS_WM_MESSAGE_LISTENER_H_ 7#pragma once 8 9#include <gtk/gtk.h> 10 11#include "base/memory/singleton.h" 12#include "base/message_loop.h" 13#include "base/observer_list.h" 14#include "chrome/browser/chromeos/wm_ipc.h" 15 16class Browser; 17class BrowserView; 18 19namespace chromeos { 20 21// WmMessageListener listens for messages from the window manager that need to 22// be dealt with by Chrome. 23// To listen for window manager messages add an observer. 24class WmMessageListener : public MessageLoopForUI::Observer { 25 public: 26 // Observer is notified any time a message is received from the window 27 // manager. 28 class Observer { 29 public: 30 virtual void ProcessWmMessage(const WmIpc::Message& message, 31 GdkWindow* window) = 0; 32 }; 33 34 static WmMessageListener* GetInstance(); 35 36 void AddObserver(Observer* observer) { 37 observers_.AddObserver(observer); 38 } 39 40 void RemoveObserver(Observer* observer) { 41 observers_.RemoveObserver(observer); 42 } 43 44 // MessageLoopForUI::Observer overrides. 45 virtual void WillProcessEvent(GdkEvent* event); 46 virtual void DidProcessEvent(GdkEvent* event); 47 48 private: 49 friend struct DefaultSingletonTraits<WmMessageListener>; 50 51 WmMessageListener(); 52 ~WmMessageListener(); 53 54 // Invoked when a valid WmIpc::Message is received. 55 void ProcessMessage(const WmIpc::Message& message, GdkWindow* window); 56 57 ObserverList<Observer> observers_; 58 59 DISALLOW_COPY_AND_ASSIGN(WmMessageListener); 60}; 61 62} // namespace chromeos 63 64#endif // CHROME_BROWSER_CHROMEOS_WM_MESSAGE_LISTENER_H_ 65