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 |