Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2675)

Unified Diff: base/message_pump_x.cc

Issue 7983022: Reland 102005 and 102009: aura: Explicitly disable GTK. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/message_pump_x.h ('k') | build/build_config.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/message_pump_x.cc
diff --git a/base/message_pump_x.cc b/base/message_pump_x.cc
index 8e098af95924e57269b906f21eb7975d926d3c0f..f9a2b6f989924b5bf9182c93c2e8af6b497e0154 100644
--- a/base/message_pump_x.cc
+++ b/base/message_pump_x.cc
@@ -4,12 +4,15 @@
#include "base/message_pump_x.h"
-#include <gdk/gdkx.h>
#include <X11/extensions/XInput2.h>
#include "base/basictypes.h"
#include "base/message_loop.h"
+#if defined(TOOLKIT_USES_GTK)
+#include <gdk/gdkx.h>
+#endif
+
namespace {
gboolean XSourcePrepare(GSource* source, gint* timeout_ms) {
@@ -40,10 +43,6 @@ GSourceFuncs XSourceFuncs = {
NULL
};
-// 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;
-
// The opcode used for checking events.
int xiopcode = -1;
@@ -51,11 +50,17 @@ int xiopcode = -1;
// connection to the display and owns it.
Display* g_xdisplay = NULL;
+#if defined(TOOLKIT_USES_GTK)
+// 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;
+
gboolean PlaceholderDispatch(GSource* source,
GSourceFunc cb,
gpointer data) {
return TRUE;
}
+#endif // defined(TOOLKIT_USES_GTK)
void InitializeXInput2(void) {
Display* display = base::MessagePumpX::GetDefaultXDisplay();
@@ -83,57 +88,62 @@ void InitializeXInput2(void) {
namespace base {
MessagePumpX::MessagePumpX() : MessagePumpGlib(),
- x_source_(NULL),
+#if defined(TOOLKIT_USES_GTK)
gdksource_(NULL),
dispatching_event_(false),
capture_x_events_(0),
- capture_gdk_events_(0) {
+ capture_gdk_events_(0),
+#endif
+ x_source_(NULL) {
+ InitializeXInput2();
+#if defined(TOOLKIT_USES_GTK)
if (use_gtk_message_pump) {
gdk_window_add_filter(NULL, &GdkEventFilter, this);
gdk_event_handler_set(&EventDispatcherX, this, NULL);
} else {
- GPollFD* x_poll = new GPollFD();
- x_poll->fd = ConnectionNumber(g_xdisplay);
- x_poll->events = G_IO_IN;
-
- x_source_ = g_source_new(&XSourceFuncs, sizeof(GSource));
- g_source_add_poll(x_source_, x_poll);
- g_source_set_can_recurse(x_source_, FALSE);
- g_source_attach(x_source_, g_main_context_default());
+ InitXSource();
}
-
- InitializeXInput2();
if (use_gtk_message_pump)
InitializeEventsToCapture();
+#else
+ InitXSource();
+#endif
}
MessagePumpX::~MessagePumpX() {
+#if defined(TOOLKIT_USES_GTK)
if (use_gtk_message_pump) {
gdk_window_remove_filter(NULL, &GdkEventFilter, this);
gdk_event_handler_set(reinterpret_cast<GdkEventFunc>(gtk_main_do_event),
this, NULL);
- } else {
- g_source_destroy(x_source_);
- g_source_unref(x_source_);
- XCloseDisplay(g_xdisplay);
- g_xdisplay = NULL;
+ return;
}
+#endif
+
+ g_source_destroy(x_source_);
+ g_source_unref(x_source_);
+ XCloseDisplay(g_xdisplay);
+ g_xdisplay = NULL;
}
+#if defined(TOOLKIT_USES_GTK)
// static
void MessagePumpX::DisableGtkMessagePump() {
use_gtk_message_pump = false;
- g_xdisplay = XOpenDisplay(NULL);
}
+#endif
// static
Display* MessagePumpX::GetDefaultXDisplay() {
+#if defined(TOOLKIT_USES_GTK)
if (use_gtk_message_pump) {
static GdkDisplay* display = gdk_display_get_default();
return display ? GDK_DISPLAY_XDISPLAY(display) : NULL;
- } else {
- return g_xdisplay;
}
+#endif
+ if (!g_xdisplay)
+ g_xdisplay = XOpenDisplay(NULL);
+ return g_xdisplay;
}
// static
@@ -141,9 +151,24 @@ bool MessagePumpX::HasXInput2() {
return xiopcode != -1;
}
+void MessagePumpX::InitXSource() {
+ DCHECK(!x_source_);
+ GPollFD* x_poll = new GPollFD();
+ x_poll->fd = ConnectionNumber(g_xdisplay);
+ x_poll->events = G_IO_IN;
+
+ x_source_ = g_source_new(&XSourceFuncs, sizeof(GSource));
+ g_source_add_poll(x_source_, x_poll);
+ g_source_set_can_recurse(x_source_, FALSE);
+ g_source_attach(x_source_, g_main_context_default());
+}
+
bool MessagePumpX::ShouldCaptureXEvent(XEvent* xev) {
- return (!use_gtk_message_pump || capture_x_events_[xev->type])
- && (xev->type != GenericEvent || xev->xcookie.extension == xiopcode);
+ return
+#if defined(TOOLKIT_USES_GTK)
+ (!use_gtk_message_pump || capture_x_events_[xev->type]) &&
+#endif
+ (xev->type != GenericEvent || xev->xcookie.extension == xiopcode);
}
bool MessagePumpX::ProcessXEvent(XEvent* xev) {
@@ -187,16 +212,19 @@ bool MessagePumpX::RunOnce(GMainContext* context, bool block) {
XNextEvent(display, &xev);
if (ProcessXEvent(&xev))
return true;
+#if defined(TOOLKIT_USES_GTK)
} else if (use_gtk_message_pump && gdksource_) {
// 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.
gdksource_->source_funcs->dispatch = gdkdispatcher_;
g_main_context_iteration(context, FALSE);
+#endif
}
}
bool retvalue;
+#if defined(TOOLKIT_USES_GTK)
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.
@@ -212,10 +240,24 @@ bool MessagePumpX::RunOnce(GMainContext* context, bool block) {
} else {
retvalue = g_main_context_iteration(context, block);
}
+#else
+ retvalue = g_main_context_iteration(context, block);
+#endif
return retvalue;
}
+bool MessagePumpX::WillProcessXEvent(XEvent* xevent) {
+ ObserverListBase<MessagePumpObserver>::Iterator it(observers());
+ MessagePumpObserver* obs;
+ while ((obs = it.GetNext()) != NULL) {
+ if (obs->WillProcessXEvent(xevent))
+ return true;
+ }
+ return false;
+}
+
+#if defined(TOOLKIT_USES_GTK)
GdkFilterReturn MessagePumpX::GdkEventFilter(GdkXEvent* gxevent,
GdkEvent* gevent,
gpointer data) {
@@ -230,16 +272,6 @@ GdkFilterReturn MessagePumpX::GdkEventFilter(GdkXEvent* gxevent,
return GDK_FILTER_CONTINUE;
}
-bool MessagePumpX::WillProcessXEvent(XEvent* xevent) {
- ObserverListBase<MessagePumpObserver>::Iterator it(observers());
- MessagePumpObserver* obs;
- while ((obs = it.GetNext()) != NULL) {
- if (obs->WillProcessXEvent(xevent))
- return true;
- }
- return false;
-}
-
void MessagePumpX::EventDispatcherX(GdkEvent* event, gpointer data) {
MessagePumpX* pump_x = reinterpret_cast<MessagePumpX*>(data);
CHECK(use_gtk_message_pump) << "GdkEvent:" << event->type;
@@ -279,11 +311,13 @@ void MessagePumpX::InitializeEventsToCapture(void) {
capture_x_events_[GenericEvent] = true;
}
+COMPILE_ASSERT(XLASTEvent >= LASTEvent, XLASTEvent_too_small);
+
+#endif // defined(TOOLKIT_USES_GTK)
+
MessagePumpObserver::EventStatus
MessagePumpObserver::WillProcessXEvent(XEvent* xev) {
return EVENT_CONTINUE;
}
-COMPILE_ASSERT(XLASTEvent >= LASTEvent, XLASTEvent_too_small);
-
} // namespace base
« no previous file with comments | « base/message_pump_x.h ('k') | build/build_config.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698