summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-10-02 13:50:24 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-10-02 13:50:24 +0200
commit127e5d5a79bc6de259f1fa4ba6a069d49a8f7a43 (patch)
treec854e161db139b8aa963ea6be3dca88d7cf7058a /src
parentc6dc4f473518d4a739445a66858115309507797e (diff)
parent9d408649458a274864ae2e7c2d67b4fa3cabbfcd (diff)
Merge remote-tracking branch 'origin/5.5' into 5.6
Diffstat (limited to 'src')
-rw-r--r--src/client/qwaylanddisplay.cpp2
-rw-r--r--src/compositor/compositor_api/qwaylandsurfaceitem.cpp4
-rw-r--r--src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp7
-rw-r--r--src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h1
-rw-r--r--src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp17
5 files changed, 25 insertions, 6 deletions
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 2d1c81a75..dbb8e12dd 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -201,6 +201,8 @@ void QWaylandDisplay::blockingReadEvents()
void QWaylandDisplay::exitWithError()
{
+ mEventThread->quit();
+ mEventThread->wait();
::exit(1);
}
diff --git a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
index 0c48df382..ca746ae41 100644
--- a/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
+++ b/src/compositor/compositor_api/qwaylandsurfaceitem.cpp
@@ -250,6 +250,10 @@ void QWaylandSurfaceItem::touchEvent(QTouchEvent *event)
inputDevice->setMouseFocus(this, pointPos, pointPos);
}
inputDevice->sendFullTouchEvent(event);
+
+ const bool isEnd = event->type() == QEvent::TouchEnd || event->type() == QEvent::TouchCancel;
+ if (isEnd && window()->mouseGrabberItem() == this)
+ ungrabMouse();
} else {
event->ignore();
}
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
index 2c3697bd8..efed808fb 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
@@ -149,6 +149,13 @@ QSurfaceFormat QWaylandEglWindow::format() const
return m_format;
}
+void QWaylandEglWindow::setVisible(bool visible)
+{
+ QWaylandWindow::setVisible(visible);
+ if (!visible)
+ invalidateSurface();
+}
+
void QWaylandEglWindow::invalidateSurface()
{
if (m_eglSurface) {
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
index 60722d168..c6bb43445 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
@@ -66,6 +66,7 @@ public:
void bindContentFBO();
void invalidateSurface() Q_DECL_OVERRIDE;
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
private:
QWaylandEglClientBufferIntegration *m_clientBufferIntegration;
diff --git a/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp b/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp
index 85215f14b..2d5a182c7 100644
--- a/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp
+++ b/src/hardwareintegration/compositor/wayland-egl/waylandeglclientbufferintegration.cpp
@@ -151,12 +151,6 @@ void WaylandEglClientBufferIntegration::initializeHardware(QtWayland::Display *w
return;
}
- d->gl_egl_image_target_texture_2d = reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(eglGetProcAddress("glEGLImageTargetTexture2DOES"));
- if (!d->gl_egl_image_target_texture_2d) {
- qWarning("QtCompositor: Failed to initialize EGL display. Could not find glEGLImageTargetTexture2DOES.");
- return;
- }
-
if (d->egl_bind_wayland_display && d->egl_unbind_wayland_display) {
d->display_bound = d->egl_bind_wayland_display(d->egl_display, waylandDisplay->handle());
if (!d->display_bound) {
@@ -175,11 +169,22 @@ void WaylandEglClientBufferIntegration::initializeHardware(QtWayland::Display *w
void WaylandEglClientBufferIntegration::bindTextureToBuffer(struct ::wl_resource *buffer)
{
Q_D(WaylandEglClientBufferIntegration);
+
if (!d->valid) {
qWarning("QtCompositor: bindTextureToBuffer() failed");
return;
}
+ // Vivante drivers on the iMX6 don't resolve this function early enough for us, they seem to require the EGL/GLES setup to be further
+ // along than they are in initializeHardware(), so do the lookup here instead.
+ if (!d->gl_egl_image_target_texture_2d)
+ d->gl_egl_image_target_texture_2d = reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(eglGetProcAddress("glEGLImageTargetTexture2DOES"));
+
+ if (!d->gl_egl_image_target_texture_2d) {
+ qWarning("QtCompositor: bindTextureToBuffer() failed. Could not find glEGLImageTargetTexture2DOES.");
+ return;
+ }
+
EGLImageKHR image = d->egl_create_image(d->egl_display, EGL_NO_CONTEXT,
EGL_WAYLAND_BUFFER_WL,
buffer, NULL);