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

Unified Diff: chrome/browser/chrome_browser_main_extra_parts_exo.cc

Issue 1486623003: Re-land: chrome: Add support for use_glib=true to wayland server. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
« build/config/ui.gni ('K') | « build/config/ui.gni ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chrome_browser_main_extra_parts_exo.cc
diff --git a/chrome/browser/chrome_browser_main_extra_parts_exo.cc b/chrome/browser/chrome_browser_main_extra_parts_exo.cc
index 9cecfbd30bccbe8f276489eef488d06268d68c34..d13c14d97a7289e0a42c540e65bfa0850bf89905 100644
--- a/chrome/browser/chrome_browser_main_extra_parts_exo.cc
+++ b/chrome/browser/chrome_browser_main_extra_parts_exo.cc
@@ -4,6 +4,10 @@
#include "chrome/browser/chrome_browser_main_extra_parts_exo.h"
+#if defined(USE_GLIB)
+#include <glib.h>
+#endif
+
#include "base/command_line.h"
#include "base/message_loop/message_loop.h"
#include "chrome/browser/ui/ash/ash_util.h"
@@ -12,6 +16,61 @@
#include "components/exo/wayland/server.h"
#include "content/public/browser/browser_thread.h"
+#if defined(USE_GLIB)
+namespace {
+
+gboolean WaylandSourcePrepare(GSource* source, gint* timeout_ms) {
+ *timeout_ms = -1;
+ return FALSE;
+}
+
+gboolean WaylandSourceCheck(GSource* source) {
+ return TRUE;
+}
+
+gboolean WaylandSourceDispatch(GSource* source,
+ GSourceFunc unused_func,
+ gpointer data) {
+ exo::wayland::Server* server = static_cast<exo::wayland::Server*>(data);
+ server->Dispatch(base::TimeDelta());
+ server->Flush();
+ return TRUE;
+}
+
+GSourceFuncs g_wayland_source_funcs = {WaylandSourcePrepare, WaylandSourceCheck,
+ WaylandSourceDispatch, nullptr};
+
+} // namespace
+
+class ChromeBrowserMainExtraPartsExo::WaylandWatcher {
+ public:
+ explicit WaylandWatcher(exo::wayland::Server* server)
+ : wayland_poll_(new GPollFD),
+ wayland_source_(
+ g_source_new(&g_wayland_source_funcs, sizeof(GSource))) {
+ wayland_poll_->fd = server->GetFileDescriptor();
+ wayland_poll_->events = G_IO_IN;
+ wayland_poll_->revents = 0;
+ g_source_add_poll(wayland_source_, wayland_poll_.get());
+ g_source_set_can_recurse(wayland_source_, TRUE);
+ g_source_set_callback(wayland_source_, nullptr, server, nullptr);
+ g_source_attach(wayland_source_, g_main_context_default());
+ }
+ ~WaylandWatcher() {
+ g_source_destroy(wayland_source_);
+ g_source_unref(wayland_source_);
+ }
+
+ private:
+ // The poll attached to |wayland_source_|.
+ scoped_ptr<GPollFD> wayland_poll_;
+
+ // The GLib event source for wayland events.
+ GSource* wayland_source_;
+
+ DISALLOW_COPY_AND_ASSIGN(WaylandWatcher);
+};
+#else
class ChromeBrowserMainExtraPartsExo::WaylandWatcher
: public base::MessagePumpLibevent::Watcher {
public:
@@ -35,6 +94,7 @@ class ChromeBrowserMainExtraPartsExo::WaylandWatcher
DISALLOW_COPY_AND_ASSIGN(WaylandWatcher);
};
+#endif
ChromeBrowserMainExtraPartsExo::ChromeBrowserMainExtraPartsExo()
: display_(new exo::Display) {}
« build/config/ui.gni ('K') | « build/config/ui.gni ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698