Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2944)

Unified Diff: base/message_pump_glib.h

Issue 7250001: Refactor the glib message-pump, and use it as the base for a gtk message pump and an X message pump. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: media.gyp update Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/message_loop.cc ('k') | base/message_pump_glib.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « base/message_loop.cc ('k') | base/message_pump_glib.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698