diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-07 01:13:39 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-07 01:13:39 +0000 |
commit | 827d38ae4b2bbd630b8950edbb52a83c5329593f (patch) | |
tree | 1d164cd6dc130ff12cd935fadbb1503f4426d5f2 | |
parent | 926bfe36e5ecc460bf274ad3d81fe6e4a89cc468 (diff) | |
download | chromium_src-827d38ae4b2bbd630b8950edbb52a83c5329593f.zip chromium_src-827d38ae4b2bbd630b8950edbb52a83c5329593f.tar.gz chromium_src-827d38ae4b2bbd630b8950edbb52a83c5329593f.tar.bz2 |
gtk: Some code cleanup for the message-pump.
GTK message-pump defines its own observer, but it has the same name as the
message-pump observers used in other platforms. So rename the GTK version
to MessagePumpGdkObserver.
Also, GTK version of message-pump dispatcher is never used, so get rid of
that.
BUG=145600
R=piman@chromium.org, thakis@chromium.org
Review URL: https://codereview.chromium.org/23537016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221846 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | base/message_loop/message_loop.cc | 3 | ||||
-rw-r--r-- | base/message_loop/message_loop.h | 7 | ||||
-rw-r--r-- | base/message_loop/message_pump_aurax11.cc | 8 | ||||
-rw-r--r-- | base/message_loop/message_pump_aurax11.h | 12 | ||||
-rw-r--r-- | base/message_loop/message_pump_glib.cc | 8 | ||||
-rw-r--r-- | base/message_loop/message_pump_glib.h | 12 | ||||
-rw-r--r-- | base/message_loop/message_pump_gtk.cc | 24 | ||||
-rw-r--r-- | base/message_loop/message_pump_gtk.h | 28 | ||||
-rw-r--r-- | base/run_loop.cc | 6 | ||||
-rw-r--r-- | base/run_loop.h | 9 |
10 files changed, 65 insertions, 52 deletions
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc index cf0b31c..cdd8721 100644 --- a/base/message_loop/message_loop.cc +++ b/base/message_loop/message_loop.cc @@ -425,7 +425,8 @@ void MessageLoop::RunInternal() { StartHistogrammer(); -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && \ + !defined(USE_GTK_MESSAGE_PUMP) if (run_loop_->dispatcher_ && type() == TYPE_UI) { static_cast<MessagePumpForUI*>(pump_.get())-> RunWithDispatcher(this, run_loop_->dispatcher_); diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h index db6aa9b..de602af 100644 --- a/base/message_loop/message_loop.h +++ b/base/message_loop/message_loop.h @@ -40,6 +40,7 @@ #elif defined(USE_OZONE) && !defined(OS_NACL) #include "base/message_loop/message_pump_ozone.h" #else +#define USE_GTK_MESSAGE_PUMP #include "base/message_loop/message_pump_gtk.h" #endif @@ -49,6 +50,8 @@ namespace base { class HistogramBase; +class MessagePumpDispatcher; +class MessagePumpObserver; class RunLoop; class ThreadTaskRunnerHandle; #if defined(OS_ANDROID) @@ -90,7 +93,9 @@ class WaitableEvent; class BASE_EXPORT MessageLoop : public MessagePump::Delegate { public: -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if defined(USE_GTK_MESSAGE_PUMP) + typedef MessagePumpGdkObserver Observer; +#elif !defined(OS_MACOSX) && !defined(OS_ANDROID) typedef MessagePumpDispatcher Dispatcher; typedef MessagePumpObserver Observer; #endif diff --git a/base/message_loop/message_pump_aurax11.cc b/base/message_loop/message_pump_aurax11.cc index 1f91a0e..54be49f 100644 --- a/base/message_loop/message_pump_aurax11.cc +++ b/base/message_loop/message_pump_aurax11.cc @@ -184,6 +184,14 @@ void MessagePumpAuraX11::RemoveDispatcherForRootWindow( root_window_dispatchers_.RemoveObserver(dispatcher); } +void MessagePumpAuraX11::AddObserver(MessagePumpObserver* observer) { + observers_.AddObserver(observer); +} + +void MessagePumpAuraX11::RemoveObserver(MessagePumpObserver* observer) { + observers_.RemoveObserver(observer); +} + bool MessagePumpAuraX11::DispatchXEvents() { Display* display = GetDefaultXDisplay(); DCHECK(display); diff --git a/base/message_loop/message_pump_aurax11.h b/base/message_loop/message_pump_aurax11.h index 89089ad..52647c3 100644 --- a/base/message_loop/message_pump_aurax11.h +++ b/base/message_loop/message_pump_aurax11.h @@ -58,6 +58,13 @@ class BASE_EXPORT MessagePumpAuraX11 : public MessagePumpGlib, void AddDispatcherForRootWindow(MessagePumpDispatcher* dispatcher); void RemoveDispatcherForRootWindow(MessagePumpDispatcher* dispatcher); + // Adds an Observer, which will start receiving notifications immediately. + void AddObserver(MessagePumpObserver* observer); + + // Removes an Observer. It is safe to call this method while an Observer is + // receiving a notification callback. + void RemoveObserver(MessagePumpObserver* observer); + // Internal function. Called by the glib source dispatch function. Processes // all available X events. bool DispatchXEvents(); @@ -92,6 +99,8 @@ class BASE_EXPORT MessagePumpAuraX11 : public MessagePumpGlib, // Returns the Dispatcher based on the event's target window. MessagePumpDispatcher* GetDispatcherForXEvent(const NativeEvent& xev) const; + ObserverList<MessagePumpObserver>& observers() { return observers_; } + // Overridden from MessagePumpDispatcher: virtual bool Dispatch(const NativeEvent& event) OVERRIDE; @@ -108,6 +117,9 @@ class BASE_EXPORT MessagePumpAuraX11 : public MessagePumpGlib, // additions. ObserverList<MessagePumpDispatcher> root_window_dispatchers_; + // List of observers. + ObserverList<MessagePumpObserver> observers_; + unsigned long x_root_window_; DISALLOW_COPY_AND_ASSIGN(MessagePumpAuraX11); diff --git a/base/message_loop/message_pump_glib.cc b/base/message_loop/message_pump_glib.cc index cfacb7b..13d8b2b 100644 --- a/base/message_loop/message_pump_glib.cc +++ b/base/message_loop/message_pump_glib.cc @@ -290,14 +290,6 @@ void MessagePumpGlib::HandleDispatch() { state_->delegate->DoDelayedWork(&delayed_work_time_); } -void MessagePumpGlib::AddObserver(MessagePumpObserver* observer) { - observers_.AddObserver(observer); -} - -void MessagePumpGlib::RemoveObserver(MessagePumpObserver* observer) { - observers_.RemoveObserver(observer); -} - void MessagePumpGlib::Run(Delegate* delegate) { RunWithDispatcher(delegate, NULL); } diff --git a/base/message_loop/message_pump_glib.h b/base/message_loop/message_pump_glib.h index 33690d0..174bd05 100644 --- a/base/message_loop/message_pump_glib.h +++ b/base/message_loop/message_pump_glib.h @@ -51,13 +51,6 @@ class BASE_EXPORT MessagePumpGlib : public MessagePump { bool HandleCheck(); void HandleDispatch(); - // Adds an Observer, which will start receiving notifications immediately. - void AddObserver(MessagePumpObserver* observer); - - // Removes an Observer. It is safe to call this method while an Observer is - // receiving a notification callback. - void RemoveObserver(MessagePumpObserver* observer); - // Overridden from MessagePump: virtual void Run(Delegate* delegate) OVERRIDE; virtual void Quit() OVERRIDE; @@ -68,8 +61,6 @@ class BASE_EXPORT MessagePumpGlib : public MessagePump { // Returns the dispatcher for the current run state (|state_->dispatcher|). MessagePumpDispatcher* GetDispatcher(); - 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. @@ -98,9 +89,6 @@ class BASE_EXPORT MessagePumpGlib : public MessagePump { // Use a scoped_ptr to avoid needing the definition of GPollFD in the header. scoped_ptr<GPollFD> wakeup_gpollfd_; - // List of observers. - ObserverList<MessagePumpObserver> observers_; - DISALLOW_COPY_AND_ASSIGN(MessagePumpGlib); }; diff --git a/base/message_loop/message_pump_gtk.cc b/base/message_loop/message_pump_gtk.cc index ad65113..86d2415 100644 --- a/base/message_loop/message_pump_gtk.cc +++ b/base/message_loop/message_pump_gtk.cc @@ -75,13 +75,7 @@ void MessagePumpGtk::DispatchEvents(GdkEvent* event) { "type", EventToTypeString(event)); WillProcessEvent(event); - - MessagePumpDispatcher* dispatcher = GetDispatcher(); - if (!dispatcher) - gtk_main_do_event(event); - else if (!dispatcher->Dispatch(event)) - Quit(); - + gtk_main_do_event(event); DidProcessEvent(event); } @@ -97,12 +91,24 @@ Display* MessagePumpGtk::GetDefaultXDisplay() { return GDK_DISPLAY_XDISPLAY(display); } +void MessagePumpGtk::AddObserver(MessagePumpGdkObserver* observer) { + observers_.AddObserver(observer); +} + +void MessagePumpGtk::RemoveObserver(MessagePumpGdkObserver* observer) { + observers_.RemoveObserver(observer); +} + void MessagePumpGtk::WillProcessEvent(GdkEvent* event) { - FOR_EACH_OBSERVER(MessagePumpObserver, observers(), WillProcessEvent(event)); + FOR_EACH_OBSERVER(MessagePumpGdkObserver, + observers_, + WillProcessEvent(event)); } void MessagePumpGtk::DidProcessEvent(GdkEvent* event) { - FOR_EACH_OBSERVER(MessagePumpObserver, observers(), DidProcessEvent(event)); + FOR_EACH_OBSERVER(MessagePumpGdkObserver, + observers_, + DidProcessEvent(event)); } // static diff --git a/base/message_loop/message_pump_gtk.h b/base/message_loop/message_pump_gtk.h index 947ab88..b3c3b8c 100644 --- a/base/message_loop/message_pump_gtk.h +++ b/base/message_loop/message_pump_gtk.h @@ -13,7 +13,7 @@ typedef struct _XDisplay Display; namespace base { // The documentation for this class is in message_pump_glib.h -class MessagePumpObserver { +class MessagePumpGdkObserver { public: // This method is called before processing a message. virtual void WillProcessEvent(GdkEvent* event) = 0; @@ -22,21 +22,7 @@ class MessagePumpObserver { virtual void DidProcessEvent(GdkEvent* event) = 0; protected: - virtual ~MessagePumpObserver() {} -}; - -// The documentation for this class is in message_pump_glib.h -// -// The nested loop is exited by either posting a quit, or returning false -// from Dispatch. -class MessagePumpDispatcher { - public: - // 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; - - protected: - virtual ~MessagePumpDispatcher() {} + virtual ~MessagePumpGdkObserver() {} }; // This class implements a message-pump for dispatching GTK events. @@ -52,6 +38,13 @@ class BASE_EXPORT MessagePumpGtk : public MessagePumpGlib { // Returns default X Display. static Display* GetDefaultXDisplay(); + // Adds an Observer, which will start receiving notifications immediately. + void AddObserver(MessagePumpGdkObserver* observer); + + // Removes an Observer. It is safe to call this method while an Observer is + // receiving a notification callback. + void RemoveObserver(MessagePumpGdkObserver* observer); + private: // Invoked from EventDispatcher. Notifies all observers we're about to // process an event. @@ -64,6 +57,9 @@ class BASE_EXPORT MessagePumpGtk : public MessagePumpGlib { // Callback prior to gdk dispatching an event. static void EventDispatcher(GdkEvent* event, void* data); + // List of observers. + ObserverList<MessagePumpGdkObserver> observers_; + DISALLOW_COPY_AND_ASSIGN(MessagePumpGtk); }; diff --git a/base/run_loop.cc b/base/run_loop.cc index 991571e..2e80ff2 100644 --- a/base/run_loop.cc +++ b/base/run_loop.cc @@ -17,12 +17,14 @@ RunLoop::RunLoop() quit_called_(false), running_(false), quit_when_idle_received_(false) { -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && \ + !defined(USE_GTK_MESSAGE_PUMP) dispatcher_ = NULL; #endif } -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && \ + !defined(USE_GTK_MESSAGE_PUMP) RunLoop::RunLoop(MessageLoop::Dispatcher* dispatcher) : loop_(MessageLoop::current()), weak_factory_(this), diff --git a/base/run_loop.h b/base/run_loop.h index 42a5160..f5ee5c3 100644 --- a/base/run_loop.h +++ b/base/run_loop.h @@ -27,12 +27,14 @@ class MessagePumpUIApplication; class BASE_EXPORT RunLoop { public: RunLoop(); -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && \ + !defined(USE_GTK_MESSAGE_PUMP) explicit RunLoop(MessageLoop::Dispatcher* dispatcher); #endif ~RunLoop(); -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && \ + !defined(USE_GTK_MESSAGE_PUMP) void set_dispatcher(MessageLoop::Dispatcher* dispatcher) { dispatcher_ = dispatcher; } @@ -98,7 +100,8 @@ class BASE_EXPORT RunLoop { // Parent RunLoop or NULL if this is the top-most RunLoop. RunLoop* previous_run_loop_; -#if !defined(OS_MACOSX) && !defined(OS_ANDROID) +#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && \ + !defined(USE_GTK_MESSAGE_PUMP) MessageLoop::Dispatcher* dispatcher_; #endif |