summaryrefslogtreecommitdiffstats
path: root/base/message_pump_x.cc
diff options
context:
space:
mode:
authoroshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 21:09:42 +0000
committeroshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 21:09:42 +0000
commitec389b968684720aac295eaab274115878ab8112 (patch)
treef6f0eb0966a2e53be081ffdd27a53b6ac698121a /base/message_pump_x.cc
parentdcd9e6fef62b0bb9f1566977e7bb78d574c53bb0 (diff)
downloadchromium_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.cc24
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();