summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/message_loop.h2
-rw-r--r--base/message_pump_observer.h54
-rw-r--r--base/message_pump_win.cc8
-rw-r--r--base/message_pump_win.h24
-rw-r--r--base/message_pump_x.cc18
-rw-r--r--base/message_pump_x.h21
6 files changed, 76 insertions, 51 deletions
diff --git a/base/message_loop.h b/base/message_loop.h
index fffcd2f..bc98c4c 100644
--- a/base/message_loop.h
+++ b/base/message_loop.h
@@ -84,7 +84,7 @@ class BASE_EXPORT MessageLoop : public base::MessagePump::Delegate {
public:
#if defined(OS_WIN)
typedef base::MessagePumpWin::Dispatcher Dispatcher;
- typedef base::MessagePumpForUI::Observer Observer;
+ typedef base::MessagePumpObserver Observer;
#elif !defined(OS_MACOSX) && !defined(OS_ANDROID)
typedef base::MessagePumpDispatcher Dispatcher;
typedef base::MessagePumpObserver Observer;
diff --git a/base/message_pump_observer.h b/base/message_pump_observer.h
new file mode 100644
index 0000000..d12f221
--- /dev/null
+++ b/base/message_pump_observer.h
@@ -0,0 +1,54 @@
+// Copyright (c) 2011 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_PUMP_OBSERVER_H
+#define BASE_MESSAGE_PUMP_OBSERVER_H
+
+#if defined(USE_X11)
+typedef union _XEvent XEvent;
+#endif
+
+namespace base {
+
+#if defined(OS_WIN)
+typedef MSG NativeEvent;
+#elif defined(USE_X11)
+typedef XEvent* NativeEvent;
+#endif
+
+enum EventStatus {
+ EVENT_CONTINUE, // The event should be dispatched as normal.
+#if defined(USE_X11)
+ EVENT_HANDLED // The event should not be processed any farther.
+#endif
+};
+
+// A MessagePumpObserver is an object that receives global
+// notifications from the UI MessageLoop with MessagePumpWin or
+// MessagePumpX.
+//
+// NOTE: An Observer implementation should be extremely fast!
+//
+// For use with MessagePumpX, please see message_pump_glib.h for more
+// info about how this is invoked in this environment.
+class BASE_EXPORT MessagePumpObserver {
+ public:
+ // This method is called before processing a NativeEvent. If the
+ // method returns EVENT_HANDLED, it indicates the event has already
+ // been handled, so the event is not processed any farther. If the
+ // method returns EVENT_CONTINUE, the event dispatching proceeds as
+ // normal.
+ virtual EventStatus WillProcessEvent(const NativeEvent& event) = 0;
+
+ // This method is called after processing a message. This method
+ // will not be called if WillProcessEvent returns EVENT_HANDLED.
+ virtual void DidProcessEvent(const NativeEvent& event) = 0;
+
+ protected:
+ virtual ~MessagePumpObserver() {}
+};
+
+} // namespace base
+
+#endif // BASE_MESSAGE_PUMP_OBSERVER_VIEWS_H
diff --git a/base/message_pump_win.cc b/base/message_pump_win.cc
index 9d0ec53..740ddd9 100644
--- a/base/message_pump_win.cc
+++ b/base/message_pump_win.cc
@@ -21,20 +21,20 @@ static const int kMsgHaveWork = WM_USER + 1;
//-----------------------------------------------------------------------------
// MessagePumpWin public:
-void MessagePumpWin::AddObserver(Observer* observer) {
+void MessagePumpWin::AddObserver(MessagePumpObserver* observer) {
observers_.AddObserver(observer);
}
-void MessagePumpWin::RemoveObserver(Observer* observer) {
+void MessagePumpWin::RemoveObserver(MessagePumpObserver* observer) {
observers_.RemoveObserver(observer);
}
void MessagePumpWin::WillProcessMessage(const MSG& msg) {
- FOR_EACH_OBSERVER(Observer, observers_, WillProcessMessage(msg));
+ FOR_EACH_OBSERVER(MessagePumpObserver, observers_, WillProcessEvent(msg));
}
void MessagePumpWin::DidProcessMessage(const MSG& msg) {
- FOR_EACH_OBSERVER(Observer, observers_, DidProcessMessage(msg));
+ FOR_EACH_OBSERVER(MessagePumpObserver, observers_, DidProcessEvent(msg));
}
void MessagePumpWin::RunWithDispatcher(
diff --git a/base/message_pump_win.h b/base/message_pump_win.h
index 5f17610..d0d32f6 100644
--- a/base/message_pump_win.h
+++ b/base/message_pump_win.h
@@ -13,6 +13,7 @@
#include "base/base_export.h"
#include "base/basictypes.h"
#include "base/message_pump.h"
+#include "base/message_pump_observer.h"
#include "base/observer_list.h"
#include "base/time.h"
#include "base/win/scoped_handle.h"
@@ -24,23 +25,6 @@ namespace base {
// controlling the lifetime of the message pump.
class BASE_EXPORT MessagePumpWin : public MessagePump {
public:
- // An Observer is an object that receives global notifications from the
- // UI MessageLoop.
- //
- // NOTE: An Observer implementation should be extremely fast!
- //
- class BASE_EXPORT Observer {
- public:
- virtual ~Observer() {}
-
- // This method is called before processing a message.
- // The message may be undefined in which case msg.message is 0
- virtual void WillProcessMessage(const MSG& msg) = 0;
-
- // This method is called when control returns from processing a UI message.
- // The message may be undefined in which case msg.message is 0
- virtual void DidProcessMessage(const MSG& msg) = 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
@@ -62,11 +46,11 @@ class BASE_EXPORT MessagePumpWin : public MessagePump {
virtual ~MessagePumpWin() {}
// Add an Observer, which will start receiving notifications immediately.
- void AddObserver(Observer* observer);
+ void AddObserver(MessagePumpObserver* observer);
// Remove an Observer. It is safe to call this method while an Observer is
// receiving a notification callback.
- void RemoveObserver(Observer* observer);
+ void RemoveObserver(MessagePumpObserver* observer);
// Give a chance to code processing additional messages to notify the
// message loop observers that another message has been processed.
@@ -95,7 +79,7 @@ class BASE_EXPORT MessagePumpWin : public MessagePump {
virtual void DoRunLoop() = 0;
int GetCurrentDelay() const;
- ObserverList<Observer> observers_;
+ ObserverList<MessagePumpObserver> observers_;
// The time at which delayed work should run.
TimeTicks delayed_work_time_;
diff --git a/base/message_pump_x.cc b/base/message_pump_x.cc
index 33ca2d5..45f24a6 100644
--- a/base/message_pump_x.cc
+++ b/base/message_pump_x.cc
@@ -193,7 +193,7 @@ bool MessagePumpX::ProcessXEvent(XEvent* xev) {
have_cookie = true;
}
- if (WillProcessXEvent(xev) == MessagePumpObserver::EVENT_CONTINUE) {
+ if (WillProcessXEvent(xev) == EVENT_CONTINUE) {
MessagePumpDispatcher::DispatchStatus status =
GetDispatcher()->Dispatch(xev);
@@ -203,6 +203,7 @@ bool MessagePumpX::ProcessXEvent(XEvent* xev) {
} else if (status == MessagePumpDispatcher::EVENT_IGNORED) {
VLOG(1) << "Event (" << xev->type << ") not handled.";
}
+ DidProcessXEvent(xev);
}
if (have_cookie) {
@@ -264,12 +265,20 @@ bool MessagePumpX::WillProcessXEvent(XEvent* xevent) {
ObserverListBase<MessagePumpObserver>::Iterator it(observers());
MessagePumpObserver* obs;
while ((obs = it.GetNext()) != NULL) {
- if (obs->WillProcessXEvent(xevent))
+ if (obs->WillProcessEvent(xevent))
return true;
}
return false;
}
+void MessagePumpX::DidProcessXEvent(XEvent* xevent) {
+ ObserverListBase<MessagePumpObserver>::Iterator it(observers());
+ MessagePumpObserver* obs;
+ while ((obs = it.GetNext()) != NULL) {
+ obs->DidProcessEvent(xevent);
+ }
+}
+
#if defined(TOOLKIT_USES_GTK)
GdkFilterReturn MessagePumpX::GdkEventFilter(GdkXEvent* gxevent,
GdkEvent* gevent,
@@ -328,9 +337,4 @@ COMPILE_ASSERT(XLASTEvent >= LASTEvent, XLASTEvent_too_small);
#endif // defined(TOOLKIT_USES_GTK)
-MessagePumpObserver::EventStatus
- MessagePumpObserver::WillProcessXEvent(XEvent* xev) {
- return EVENT_CONTINUE;
-}
-
} // namespace base
diff --git a/base/message_pump_x.h b/base/message_pump_x.h
index eab6f6b..39d7d9c 100644
--- a/base/message_pump_x.h
+++ b/base/message_pump_x.h
@@ -7,6 +7,7 @@
#include "base/message_pump.h"
#include "base/message_pump_glib.h"
+#include "base/message_pump_observer.h"
#include <bitset>
@@ -16,30 +17,11 @@
#include <gtk/gtk.h>
#endif
-typedef union _XEvent XEvent;
typedef struct _XDisplay Display;
namespace base {
// The documentation for this class is in message_pump_glib.h
-class BASE_EXPORT MessagePumpObserver {
- public:
- enum EventStatus {
- EVENT_CONTINUE, // The event should be dispatched as normal.
- EVENT_HANDLED // The event should not be processed any farther.
- };
-
- // This method is called before processing an XEvent. If the method returns
- // EVENT_HANDLED, it indicates the event has already been handled, so the
- // event is not processed any farther. If the method returns EVENT_CONTINUE,
- // the event dispatching proceeds as normal.
- virtual EventStatus WillProcessXEvent(XEvent* xevent);
-
- 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 EVENT_QUIT
// from Dispatch.
@@ -97,6 +79,7 @@ class BASE_EXPORT MessagePumpX : public MessagePumpGlib {
// not send the event to any other observers and returns true. Returns false
// if no observer returns true.
bool WillProcessXEvent(XEvent* xevent);
+ void DidProcessXEvent(XEvent* xevent);
#if defined(TOOLKIT_USES_GTK)
// Some XEvent's can't be directly read from X event queue and will go
// through GDK's dispatching process and may get discarded. This function