From 258e3aad97be370663983573b557c4115db3fafb Mon Sep 17 00:00:00 2001
From: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Date: Wed, 30 Oct 2013 11:28:48 +0100
Subject: [PATCH] Use our own implementation of GetDefaultXDisplay.

This allows the Chromium GL code to initialize on the display created
by Qt.

Change-Id: I3d21f56c3792d6e99cb94690f56d7dd5c542045a
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
---
 3rdparty                                      |  2 +-
 ...ion-of-MessagePumpGtk-GetDefaultXDis.patch | 34 +++++++++++++++++++
 patches/patch-chromium.sh                     |  1 +
 shared/shared.pro                             |  1 +
 shared/shared_globals.cpp                     | 24 +++++++++++++
 5 files changed, 61 insertions(+), 1 deletion(-)
 create mode 100644 patches/0001-Hide-the-definition-of-MessagePumpGtk-GetDefaultXDis.patch

diff --git a/3rdparty b/3rdparty
index aee1bf50e..63f1510d7 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit aee1bf50ed6733635ac6ae7389657a4563a8a7f7
+Subproject commit 63f1510d708ce6e90354c63655fa21bd4906e52e
diff --git a/patches/0001-Hide-the-definition-of-MessagePumpGtk-GetDefaultXDis.patch b/patches/0001-Hide-the-definition-of-MessagePumpGtk-GetDefaultXDis.patch
new file mode 100644
index 000000000..20b614d56
--- /dev/null
+++ b/patches/0001-Hide-the-definition-of-MessagePumpGtk-GetDefaultXDis.patch
@@ -0,0 +1,34 @@
+From 717b027460dbda87c965ea0069fd11bbe7aad59f Mon Sep 17 00:00:00 2001
+From: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
+Date: Fri, 20 Sep 2013 15:01:41 +0200
+Subject: [PATCH] Hide the definition of MessagePumpGtk::GetDefaultXDisplay.
+
+---
+ base/message_loop/message_pump_gtk.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/base/message_loop/message_pump_gtk.cc b/base/message_loop/message_pump_gtk.cc
+index ad65113..af59685 100644
+--- a/base/message_loop/message_pump_gtk.cc
++++ b/base/message_loop/message_pump_gtk.cc
+@@ -85,6 +85,9 @@ void MessagePumpGtk::DispatchEvents(GdkEvent* event) {
+   DidProcessEvent(event);
+ }
+ 
++// FIXME: Get our own MessagePumpUI to avoid this.
++// Comment out this version so that our Qt version in shared_globals.cpp is used.
++/*
+ // static
+ Display* MessagePumpGtk::GetDefaultXDisplay() {
+   static GdkDisplay* display = gdk_display_get_default();
+@@ -96,6 +99,7 @@ Display* MessagePumpGtk::GetDefaultXDisplay() {
+   }
+   return GDK_DISPLAY_XDISPLAY(display);
+ }
++*/
+ 
+ void MessagePumpGtk::WillProcessEvent(GdkEvent* event) {
+   FOR_EACH_OBSERVER(MessagePumpObserver, observers(), WillProcessEvent(event));
+-- 
+1.8.4
+
diff --git a/patches/patch-chromium.sh b/patches/patch-chromium.sh
index 510237a5a..2c3834b08 100755
--- a/patches/patch-chromium.sh
+++ b/patches/patch-chromium.sh
@@ -68,6 +68,7 @@ git am $PATCH_DIR/0001-remove-Wno-deprecated-register-from-common.gypi.patch
 git am $PATCH_DIR/0001-Solve-conflicts-when-including-both-QtOpenGL-headers.patch
 git am $PATCH_DIR/0001-Do-not-forward-declare-UIResourceRequest-Identity-an.patch
 git am $PATCH_DIR/0001-Fix-the-build-with-a-GL-ES2-configured-Qt.patch
+git am $PATCH_DIR/0001-Hide-the-definition-of-MessagePumpGtk-GetDefaultXDis.patch
 
 cd $CHROMIUM_SRC_DIR/third_party/WebKit
 echo "Entering $PWD"
diff --git a/shared/shared.pro b/shared/shared.pro
index a125819e0..6c35063a8 100644
--- a/shared/shared.pro
+++ b/shared/shared.pro
@@ -23,6 +23,7 @@ PER_CONFIG_DEFINES = QTWEBENGINEPROCESS_PATH=\\\"$$getOutDir()/%config/$$QTWEBEN
 CONFIG(release, debug|release): DEFINES += NDEBUG
 
 QT += gui
+QT_PRIVATE += gui-private
 
 SOURCES = \
         resource_bundle_qt.cpp \
diff --git a/shared/shared_globals.cpp b/shared/shared_globals.cpp
index 70ef901db..3d20ad45d 100644
--- a/shared/shared_globals.cpp
+++ b/shared/shared_globals.cpp
@@ -41,10 +41,17 @@
 
 #include "shared_globals.h"
 
+#include "base/message_loop/message_pump_gtk.h"
 #include "content/browser/renderer_host/render_widget_host_view_base.h"
 
+#include <QGuiApplication>
 #include <QScreen>
 #include <QWindow>
+#include <qpa/qplatformnativeinterface.h>
+
+#if defined(USE_X11)
+#include <X11/Xlib.h>
+#endif
 
 void GetScreenInfoFromNativeWindow(QWindow* window, WebKit::WebScreenInfo* results)
 {
@@ -63,6 +70,23 @@ void GetScreenInfoFromNativeWindow(QWindow* window, WebKit::WebScreenInfo* resul
     *results = r;
 }
 
+namespace base {
+
+#if defined(USE_X11)
+Display* MessagePumpGtk::GetDefaultXDisplay() {
+  static void *display = qApp->platformNativeInterface()->nativeResourceForScreen(QByteArrayLiteral("display"), qApp->primaryScreen());
+  if (!display) {
+    // XLib isn't available or has not been initialized, which is a decision we wish to
+    // support, for example for the GPU process.
+    static Display* xdisplay = XOpenDisplay(NULL);
+    return xdisplay;
+  }
+  return static_cast<Display*>(display);
+}
+#endif
+
+}
+
 namespace content {
 class WebContentsImpl;
 class WebContentsViewPort;
-- 
GitLab