Hello community,

here is the log from the commit of package libqt5-qtwayland for 
openSUSE:Factory checked in at 2018-01-16 09:33:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libqt5-qtwayland (Old)
 and      /work/SRC/openSUSE:Factory/.libqt5-qtwayland.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libqt5-qtwayland"

Tue Jan 16 09:33:02 2018 rev:19 rq:562917 version:5.10.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/libqt5-qtwayland/libqt5-qtwayland.changes        
2018-01-09 14:46:55.289445164 +0100
+++ /work/SRC/openSUSE:Factory/.libqt5-qtwayland.new/libqt5-qtwayland.changes   
2018-01-16 09:33:03.443840872 +0100
@@ -1,0 +2,8 @@
+Tue Jan  9 14:39:26 UTC 2018 - [email protected]
+
+- Add patch (pending upstream) to fix destruction of hidden surfaces 
(kde#381630):
+  * Dont-recreate-hidden-egl-surfaces.patch
+- Keep workaround-null-object.patch as it can in theory prevent
+  crashes and has no effect otherwise
+
+-------------------------------------------------------------------

New:
----
  Dont-recreate-hidden-egl-surfaces.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libqt5-qtwayland.spec ++++++
--- /var/tmp/diff_new_pack.SXK2Nt/_old  2018-01-16 09:33:04.975769197 +0100
+++ /var/tmp/diff_new_pack.SXK2Nt/_new  2018-01-16 09:33:04.979769009 +0100
@@ -33,6 +33,8 @@
 Source1:        baselibs.conf
 # PATCH-FIX-OPENSUSE
 Patch1:         workaround-null-object.patch
+# Pending for upstream 5.9 (https://codereview.qt-project.org/#/c/210552/)
+Patch1500:      Dont-recreate-hidden-egl-surfaces.patch
 # Patches from upstream dev branch
 Patch2000:      0001-Implement-basic-key-composition-support.patch
 Patch2001:      0002-Automatically-change-scale-when-entering-a-new-outpu.patch
@@ -107,6 +109,7 @@
 %prep
 %setup -q -n %{tar_version}
 %patch1 -p1
+%patch1500 -p1
 %patch2000 -p1
 %patch2001 -p1
 

++++++ Dont-recreate-hidden-egl-surfaces.patch ++++++
>From a343c589a966d0342fcc75e0d6ce24e1f5157540 Mon Sep 17 00:00:00 2001
From: David Edmundson <[email protected]>
Date: Wed, 3 Jan 2018 19:18:42 +0000
Subject: [PATCH] Don't recreate hidden egl surfaces

QWaylandEglWindow deletes surfaces when a window changes from hidden to
visible, presumably as a result of us not having a valid wl_surface
object. By extension it doesn't make sense to create a surface whilst a
window is still hidden.

This fixes a crash where a QQuickWindow hides and then is destroyed. In
QQuickWindow destruction we have to create a valid context in order to
delete any textures/assets owned by the scene graph; as the wl_surface
has gone this causes an error in the EGL libs when we create an EGL
surface.

Task-number: QTBUG-65553
Change-Id: I9b37a86326bf2cd7737c4e839c1aa8c74cf08116
---
 .../client/wayland-egl/qwaylandglcontext.cpp       |  2 +-
 tests/auto/client/client/tst_client.cpp            | 35 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

Index: 
qtwayland-everywhere-src-5.10.0/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
===================================================================
--- 
qtwayland-everywhere-src-5.10.0.orig/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+++ 
qtwayland-everywhere-src-5.10.0/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
@@ -407,7 +407,7 @@ bool QWaylandGLContext::makeCurrent(QPla
         window->createDecoration();
 
     if (eglSurface == EGL_NO_SURFACE) {
-        window->updateSurface(true);
+        window->updateSurface(window->isExposed());
         eglSurface = window->eglSurface();
     }
 
Index: qtwayland-everywhere-src-5.10.0/tests/auto/client/client/tst_client.cpp
===================================================================
--- qtwayland-everywhere-src-5.10.0.orig/tests/auto/client/client/tst_client.cpp
+++ qtwayland-everywhere-src-5.10.0/tests/auto/client/client/tst_client.cpp
@@ -35,6 +35,8 @@
 #include <QMimeData>
 #include <QPixmap>
 #include <QDrag>
+#include <QWindow>
+#include <QOpenGLWindow>
 
 #include <QtTest/QtTest>
 
@@ -108,6 +110,25 @@ public:
     QPoint mousePressPos;
 };
 
+class TestGlWindow : public QOpenGLWindow
+{
+    Q_OBJECT
+
+public:
+    TestGlWindow();
+
+protected:
+    void paintGL() override;
+};
+
+TestGlWindow::TestGlWindow()
+{}
+
+void TestGlWindow::paintGL()
+{
+    glClear(GL_COLOR_BUFFER_BIT);
+}
+
 class tst_WaylandClient : public QObject
 {
     Q_OBJECT
@@ -145,6 +166,7 @@ private slots:
     void dontCrashOnMultipleCommits();
     void hiddenTransientParent();
     void hiddenPopupParent();
+    void glWindow();
 
 private:
     MockCompositor *compositor;
@@ -404,6 +426,19 @@ void tst_WaylandClient::hiddenPopupParen
     QTRY_VERIFY(compositor->surface());
 }
 
+void tst_WaylandClient::glWindow()
+{
+    QScopedPointer<TestGlWindow> testWindow(new TestGlWindow);
+    testWindow->show();
+    QSharedPointer<MockSurface> surface;
+    QTRY_VERIFY(surface = compositor->surface());
+
+    //confirm we don't crash when we delete an already hidden GL window
+    //QTBUG-65553
+    testWindow->setVisible(false);
+    QTRY_VERIFY(!compositor->surface());
+}
+
 int main(int argc, char **argv)
 {
     setenv("XDG_RUNTIME_DIR", ".", 1);

Reply via email to