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