Home | History | Annotate | Download | only in chromeos
      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