summaryrefslogtreecommitdiffstats
path: root/base/message_pump_glib.cc
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-15 22:40:05 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-15 22:40:05 +0000
commit05062e288e4b8f174a79cc698c3c97d7d12975be (patch)
tree2770b53fd364edea767213167b6703d4e8cc7251 /base/message_pump_glib.cc
parentd90eaa38f5cd59970b50491b7e5bda8b230614b7 (diff)
downloadchromium_src-05062e288e4b8f174a79cc698c3c97d7d12975be.zip
chromium_src-05062e288e4b8f174a79cc698c3c97d7d12975be.tar.gz
chromium_src-05062e288e4b8f174a79cc698c3c97d7d12975be.tar.bz2
Adds an observer callback to Linux's MessagePumpForUI.
BUG=none TEST=none Review URL: http://codereview.chromium.org/112029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16204 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_pump_glib.cc')
-rw-r--r--base/message_pump_glib.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/base/message_pump_glib.cc b/base/message_pump_glib.cc
index da40f26..0f8e197 100644
--- a/base/message_pump_glib.cc
+++ b/base/message_pump_glib.cc
@@ -110,9 +110,12 @@ MessagePumpForUI::MessagePumpForUI()
// This is needed to allow Run calls inside Dispatch.
g_source_set_can_recurse(work_source_, TRUE);
g_source_attach(work_source_, context_);
+ gdk_event_handler_set(&EventDispatcher, this, NULL);
}
MessagePumpForUI::~MessagePumpForUI() {
+ gdk_event_handler_set(reinterpret_cast<GdkEventFunc>(gtk_main_do_event),
+ this, NULL);
g_source_destroy(work_source_);
g_source_unref(work_source_);
close(wakeup_pipe_read_);
@@ -210,6 +213,18 @@ void MessagePumpForUI::HandleDispatch() {
return;
}
+void MessagePumpForUI::AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
+}
+
+void MessagePumpForUI::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+void MessagePumpForUI::WillProcessEvent(GdkEvent* event) {
+ FOR_EACH_OBSERVER(Observer, observers_, WillProcessEvent(event));
+}
+
void MessagePumpForUI::Quit() {
if (state_) {
state_->should_quit = true;
@@ -235,4 +250,10 @@ void MessagePumpForUI::ScheduleDelayedWork(const Time& delayed_work_time) {
ScheduleWork();
}
+// static
+void MessagePumpForUI::EventDispatcher(GdkEvent* event, gpointer data) {
+ reinterpret_cast<MessagePumpForUI*>(data)->WillProcessEvent(event);
+ gtk_main_do_event(event);
+}
+
} // namespace base