diff options
author | oshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-13 21:09:42 +0000 |
---|---|---|
committer | oshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-13 21:09:42 +0000 |
commit | ec389b968684720aac295eaab274115878ab8112 (patch) | |
tree | f6f0eb0966a2e53be081ffdd27a53b6ac698121a /base/message_pump_x.cc | |
parent | dcd9e6fef62b0bb9f1566977e7bb78d574c53bb0 (diff) | |
download | chromium_src-ec389b968684720aac295eaab274115878ab8112.zip chromium_src-ec389b968684720aac295eaab274115878ab8112.tar.gz chromium_src-ec389b968684720aac295eaab274115878ab8112.tar.bz2 |
Add ability to disable gtk event pumping in MessagePumpX
This is intermediate step to remove gtk from chromeos/touch.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/7357004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92414 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_pump_x.cc')
-rw-r--r-- | base/message_pump_x.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/base/message_pump_x.cc b/base/message_pump_x.cc index a50e182..d6975c4 100644 --- a/base/message_pump_x.cc +++ b/base/message_pump_x.cc @@ -21,6 +21,10 @@ gboolean PlaceholderDispatch(GSource* source, return TRUE; } +// A flag to disable GTK's message pump. This is intermediate step +// to remove gtk and will be removed once migration is complete. +bool use_gtk_message_pump = true; + } // namespace namespace base { @@ -39,7 +43,8 @@ MessagePumpX::MessagePumpX() : MessagePumpGlib(), #if defined(HAVE_XINPUT2) InitializeXInput2(); #endif - InitializeEventsToCapture(); + if (use_gtk_message_pump) + InitializeEventsToCapture(); } MessagePumpX::~MessagePumpX() { @@ -48,15 +53,19 @@ MessagePumpX::~MessagePumpX() { this, NULL); } +// static +void MessagePumpX::DisableGtkMessagePump() { + use_gtk_message_pump = false; +} + bool MessagePumpX::ShouldCaptureXEvent(XEvent* xev) { - return capture_x_events_[xev->type] + return (!use_gtk_message_pump || capture_x_events_[xev->type]) #if defined(HAVE_XINPUT2) - && (xev->type != GenericEvent || xev->xcookie.extension == xiopcode_) + && (xev->type != GenericEvent || xev->xcookie.extension == xiopcode_) #endif - ; + ; } - bool MessagePumpX::ProcessXEvent(XEvent* xev) { bool should_quit = false; @@ -108,14 +117,14 @@ bool MessagePumpX::RunOnce(GMainContext* context, bool block) { // TODO(sad): A couple of extra events can still sneak in during this. // Those should be sent back to the X queue from the dispatcher // EventDispatcherX. - if (gdksource_) + if (gdksource_ && use_gtk_message_pump) gdksource_->source_funcs->dispatch = gdkdispatcher_; g_main_context_iteration(context, FALSE); } } bool retvalue; - if (gdksource_) { + if (gdksource_ && use_gtk_message_pump) { // Replace the dispatch callback of the GDK event source temporarily so that // it doesn't read events from X. gboolean (*cb)(GSource*, GSourceFunc, void*) = @@ -160,6 +169,7 @@ bool MessagePumpX::WillProcessXEvent(XEvent* xevent) { void MessagePumpX::EventDispatcherX(GdkEvent* event, gpointer data) { MessagePumpX* pump_x = reinterpret_cast<MessagePumpX*>(data); + CHECK(use_gtk_message_pump); if (!pump_x->gdksource_) { pump_x->gdksource_ = g_main_current_source(); |