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);
