diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-15 22:40:05 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-15 22:40:05 +0000 |
commit | 05062e288e4b8f174a79cc698c3c97d7d12975be (patch) | |
tree | 2770b53fd364edea767213167b6703d4e8cc7251 /base/message_pump_glib.cc | |
parent | d90eaa38f5cd59970b50491b7e5bda8b230614b7 (diff) | |
download | chromium_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.cc | 21 |
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 |