1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_WM_MESSAGE_LISTENER_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_WM_MESSAGE_LISTENER_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/observer_list.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/wm_ipc.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserView; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WmMessageListener listens for messages from the window manager that need to 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// be dealt with by Chrome. 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// To listen for window manager messages add an observer. 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WmMessageListener : public MessageLoopForUI::Observer { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Observer is notified any time a message is received from the window 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // manager. 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class Observer { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ProcessWmMessage(const WmIpc::Message& message, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GdkWindow* window) = 0; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen static WmMessageListener* GetInstance(); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddObserver(Observer* observer) { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch observers_.AddObserver(observer); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RemoveObserver(Observer* observer) { 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch observers_.RemoveObserver(observer); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // MessageLoopForUI::Observer overrides. 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void WillProcessEvent(GdkEvent* event); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidProcessEvent(GdkEvent* event); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend struct DefaultSingletonTraits<WmMessageListener>; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WmMessageListener(); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~WmMessageListener(); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invoked when a valid WmIpc::Message is received. 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ProcessMessage(const WmIpc::Message& message, GdkWindow* window); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ObserverList<Observer> observers_; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(WmMessageListener); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_WM_MESSAGE_LISTENER_H_ 65