| Index: base/message_pump_glib.h
|
| diff --git a/base/message_pump_glib.h b/base/message_pump_glib.h
|
| index 32d0d8fddd7e32ec462eea8119e97b98062f2769..36d75cd01c4694399aaa0e2bfc71e80bb9d3e812 100644
|
| --- a/base/message_pump_glib.h
|
| +++ b/base/message_pump_glib.h
|
| @@ -11,56 +11,40 @@
|
| #include "base/observer_list.h"
|
| #include "base/time.h"
|
|
|
| -typedef union _GdkEvent GdkEvent;
|
| typedef struct _GMainContext GMainContext;
|
| typedef struct _GPollFD GPollFD;
|
| typedef struct _GSource GSource;
|
|
|
| namespace base {
|
|
|
| -// This class implements a MessagePump needed for TYPE_UI MessageLoops on
|
| -// OS_LINUX platforms using GLib.
|
| -class MessagePumpForUI : public MessagePump {
|
| +// MessagePumpObserver is notified prior to an event being dispatched. As
|
| +// Observers are notified of every change, they have to be FAST! The platform
|
| +// specific implementation of the class is in message_pump_gtk/message_pump_x.
|
| +class MessagePumpObserver;
|
| +
|
| +// MessagePumpDispatcher is used during a nested invocation of Run to dispatch
|
| +// events. If Run is invoked with a non-NULL MessagePumpDispatcher, MessageLoop
|
| +// does not dispatch events (or invoke gtk_main_do_event), rather every event is
|
| +// passed to Dispatcher's Dispatch method for dispatch. It is up to the
|
| +// Dispatcher to dispatch, or not, the event. The platform specific
|
| +// implementation of the class is in message_pump_gtk/message_pump_x.
|
| +class MessagePumpDispatcher;
|
| +
|
| +// This class implements a base MessagePump needed for TYPE_UI MessageLoops on
|
| +// platforms using GLib.
|
| +class MessagePumpGlib : public MessagePump {
|
| public:
|
| - // Observer is notified prior to a GdkEvent event being dispatched. As
|
| - // Observers are notified of every change, they have to be FAST!
|
| - class Observer {
|
| - public:
|
| - virtual ~Observer() {}
|
| -
|
| - // This method is called before processing a message.
|
| - virtual void WillProcessEvent(GdkEvent* event) = 0;
|
| -
|
| - // This method is called after processing a message.
|
| - virtual void DidProcessEvent(GdkEvent* event) = 0;
|
| - };
|
| -
|
| - // Dispatcher is used during a nested invocation of Run to dispatch events.
|
| - // If Run is invoked with a non-NULL Dispatcher, MessageLoop does not
|
| - // dispatch events (or invoke gtk_main_do_event), rather every event is
|
| - // passed to Dispatcher's Dispatch method for dispatch. It is up to the
|
| - // Dispatcher to dispatch, or not, the event.
|
| - //
|
| - // The nested loop is exited by either posting a quit, or returning false
|
| - // from Dispatch.
|
| - class Dispatcher {
|
| - public:
|
| - virtual ~Dispatcher() {}
|
| - // Dispatches the event. If true is returned processing continues as
|
| - // normal. If false is returned, the nested loop exits immediately.
|
| - virtual bool Dispatch(GdkEvent* event) = 0;
|
| - };
|
| -
|
| - MessagePumpForUI();
|
| - virtual ~MessagePumpForUI();
|
| -
|
| - // Like MessagePump::Run, but GdkEvent objects are routed through dispatcher.
|
| - virtual void RunWithDispatcher(Delegate* delegate, Dispatcher* dispatcher);
|
| + MessagePumpGlib();
|
| + virtual ~MessagePumpGlib();
|
| +
|
| + // Like MessagePump::Run, but events are routed through dispatcher.
|
| + virtual void RunWithDispatcher(Delegate* delegate,
|
| + MessagePumpDispatcher* dispatcher);
|
|
|
| // Run a single iteration of the mainloop. A return value of true indicates
|
| // that an event was handled. |block| indicates if it should wait if no event
|
| // is ready for processing.
|
| - virtual bool RunOnce(GMainContext* context, bool block);
|
| + virtual bool RunOnce(GMainContext* context, bool block) = 0;
|
|
|
| // Internal methods used for processing the pump callbacks. They are
|
| // public for simplicity but should not be used directly. HandlePrepare
|
| @@ -73,15 +57,11 @@ class MessagePumpForUI : public MessagePump {
|
| void HandleDispatch();
|
|
|
| // Adds an Observer, which will start receiving notifications immediately.
|
| - void AddObserver(Observer* observer);
|
| + void AddObserver(MessagePumpObserver* observer);
|
|
|
| // Removes an Observer. It is safe to call this method while an Observer is
|
| // receiving a notification callback.
|
| - void RemoveObserver(Observer* observer);
|
| -
|
| - // Dispatch an available GdkEvent. Essentially this allows a subclass to do
|
| - // some task before/after calling the default handler (EventDispatcher).
|
| - virtual void DispatchEvents(GdkEvent* event);
|
| + void RemoveObserver(MessagePumpObserver* observer);
|
|
|
| // Overridden from MessagePump:
|
| virtual void Run(Delegate* delegate);
|
| @@ -91,26 +71,15 @@ class MessagePumpForUI : public MessagePump {
|
|
|
| protected:
|
| // Returns the dispatcher for the current run state (|state_->dispatcher|).
|
| - Dispatcher* GetDispatcher();
|
| + MessagePumpDispatcher* GetDispatcher();
|
|
|
| - ObserverList<Observer>& observers() { return observers_; }
|
| + ObserverList<MessagePumpObserver>& observers() { return observers_; }
|
|
|
| private:
|
| // We may make recursive calls to Run, so we save state that needs to be
|
| // separate between them in this structure type.
|
| struct RunState;
|
|
|
| - // Invoked from EventDispatcher. Notifies all observers we're about to
|
| - // process an event.
|
| - void WillProcessEvent(GdkEvent* event);
|
| -
|
| - // Invoked from EventDispatcher. Notifies all observers we processed an
|
| - // event.
|
| - void DidProcessEvent(GdkEvent* event);
|
| -
|
| - // Callback prior to gdk dispatching an event.
|
| - static void EventDispatcher(GdkEvent* event, void* data);
|
| -
|
| RunState* state_;
|
|
|
| // This is a GLib structure that we can add event sources to. We use the
|
| @@ -135,9 +104,9 @@ class MessagePumpForUI : public MessagePump {
|
| scoped_ptr<GPollFD> wakeup_gpollfd_;
|
|
|
| // List of observers.
|
| - ObserverList<Observer> observers_;
|
| + ObserverList<MessagePumpObserver> observers_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(MessagePumpForUI);
|
| + DISALLOW_COPY_AND_ASSIGN(MessagePumpGlib);
|
| };
|
|
|
| } // namespace base
|
|
|