wm_message_listener.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2010 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/message_loop.h"
12#include "base/observer_list.h"
13#include "base/singleton.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