summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2013-10-30 11:28:48 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-11 17:25:17 +0100
commit258e3aad97be370663983573b557c4115db3fafb (patch)
tree0a5a55d7825fa93d7c3a0557c1dfb851aac05ec3
parentfb62607e950ac711f7366b378d8d5f952d4fd1b3 (diff)
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>
m---------3rdparty0
-rw-r--r--patches/0001-Hide-the-definition-of-MessagePumpGtk-GetDefaultXDis.patch34
-rwxr-xr-xpatches/patch-chromium.sh1
-rw-r--r--shared/shared.pro1
-rw-r--r--shared/shared_globals.cpp24
5 files changed, 60 insertions, 0 deletions
diff --git a/3rdparty b/3rdparty
-Subproject aee1bf50ed6733635ac6ae7389657a4563a8a7f
+Subproject 63f1510d708ce6e90354c63655fa21bd4906e52
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;