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 16 class Browser; 17 class BrowserView; 18 19 namespace 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. 24 class 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