// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_MESSAGE_LOOP_MESSAGE_PUMP_OZONE_H_ #define BASE_MESSAGE_LOOP_MESSAGE_PUMP_OZONE_H_ #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "base/message_loop/message_pump_dispatcher.h" #include "base/message_loop/message_pump_libevent.h" #include "base/message_loop/message_pump_observer.h" #include "base/observer_list.h" namespace base { // This class implements a message-pump for processing events from input devices // Refer to MessagePump for further documentation. class BASE_EXPORT MessagePumpOzone : public MessagePumpLibevent, public MessagePumpDispatcher { public: MessagePumpOzone(); virtual ~MessagePumpOzone(); // Returns the UI message pump. static MessagePumpOzone* Current(); // Add/Remove the root window dispatcher. void AddDispatcherForRootWindow(MessagePumpDispatcher* dispatcher); void RemoveDispatcherForRootWindow(MessagePumpDispatcher* dispatcher); void RunWithDispatcher(Delegate* delegate, MessagePumpDispatcher* dispatcher); // Add / remove an Observer, which will start receiving notifications // immediately. void AddObserver(MessagePumpObserver* observer); void RemoveObserver(MessagePumpObserver* observer); // Overridden from MessagePumpDispatcher. virtual bool Dispatch(const NativeEvent& event) OVERRIDE; private: std::vector<MessagePumpDispatcher*> dispatcher_; DISALLOW_COPY_AND_ASSIGN(MessagePumpOzone); }; typedef MessagePumpOzone MessagePumpForUI; } // namespace base #endif // BASE_MESSAGE_LOOP_MESSAGE_PUMP_OZONE_H_