Home | History | Annotate | Download | only in message_loop
      1 // Copyright (c) 2013 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 BASE_MESSAGE_LOOP_MESSAGE_PUMP_OZONE_H_
      6 #define BASE_MESSAGE_LOOP_MESSAGE_PUMP_OZONE_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/memory/scoped_vector.h"
     10 #include "base/message_loop/message_pump_dispatcher.h"
     11 #include "base/message_loop/message_pump_libevent.h"
     12 #include "base/message_loop/message_pump_observer.h"
     13 #include "base/observer_list.h"
     14 
     15 namespace base {
     16 
     17 // This class implements a message-pump for processing events from input devices
     18 // Refer to MessagePump for further documentation.
     19 class BASE_EXPORT MessagePumpOzone : public MessagePumpLibevent,
     20                                      public MessagePumpDispatcher {
     21  public:
     22   MessagePumpOzone();
     23   virtual ~MessagePumpOzone();
     24 
     25   // Returns the UI message pump.
     26   static MessagePumpOzone* Current();
     27 
     28   // Add/Remove the root window dispatcher.
     29   void AddDispatcherForRootWindow(MessagePumpDispatcher* dispatcher);
     30   void RemoveDispatcherForRootWindow(MessagePumpDispatcher* dispatcher);
     31 
     32   void RunWithDispatcher(Delegate* delegate, MessagePumpDispatcher* dispatcher);
     33 
     34   // Add / remove an Observer, which will start receiving notifications
     35   // immediately.
     36   void AddObserver(MessagePumpObserver* observer);
     37   void RemoveObserver(MessagePumpObserver* observer);
     38 
     39   // Overridden from MessagePumpDispatcher.
     40   virtual bool Dispatch(const NativeEvent& event) OVERRIDE;
     41 
     42  private:
     43   std::vector<MessagePumpDispatcher*> dispatcher_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(MessagePumpOzone);
     46 };
     47 
     48 typedef MessagePumpOzone MessagePumpForUI;
     49 
     50 }  // namespace base
     51 
     52 #endif  // BASE_MESSAGE_LOOP_MESSAGE_PUMP_OZONE_H_
     53