Date: Thursday, February 22, 2018 @ 12:53:35
  Author: arojas
Revision: 317391

Fix crash when attaching a screen (QTBUG#62044)

Added:
  qt5-wayland/trunk/qtbug-62044.patch
Modified:
  qt5-wayland/trunk/PKGBUILD

-------------------+
 PKGBUILD          |    9 ++++++---
 qtbug-62044.patch |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2018-02-22 10:10:16 UTC (rev 317390)
+++ PKGBUILD    2018-02-22 12:53:35 UTC (rev 317391)
@@ -5,7 +5,7 @@
 pkgname=qt5-wayland
 _qtver=5.10.1
 pkgver=${_qtver/-/}
-pkgrel=1
+pkgrel=2
 arch=('x86_64')
 url='http://qt-project.org/'
 license=('GPL3' 'LGPL3' 'FDL' 'custom')
@@ -14,9 +14,11 @@
 groups=('qt' 'qt5')
 _pkgfqn="${pkgname/5-/}-everywhere-src-${_qtver}"
 
source=("http://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz";
-        
qtwayland-key-compose.patch::"https://github.com/qt/qtwayland/commit/57c4af2b.patch";)
+        
qtwayland-key-compose.patch::"https://github.com/qt/qtwayland/commit/57c4af2b.patch";
+        qtbug-62044.patch)
 sha256sums=('f5a7643a5ebcdc50d02b293191e675f387f67dc360c27bf6f94345372fba6356'
-            '401debccda18236869d601883e1ea9c0d0a541ea12656e43ef9e7d53b835dd92')
+            '401debccda18236869d601883e1ea9c0d0a541ea12656e43ef9e7d53b835dd92'
+            '4b0ac091873b7a2b156ed2af4b2e32ecb22bfb99618f1ae76e9b72670933c3dd')
 
 prepare() {
   mkdir -p build
@@ -23,6 +25,7 @@
 
   cd $_pkgfqn
   patch -p1 -i ../qtwayland-key-compose.patch # Backport key composition 
support
+  patch -p1 -i ../qtbug-62044.patch # Fix crash when connecting a new screen
 }
 
 build() {

Added: qtbug-62044.patch
===================================================================
--- qtbug-62044.patch                           (rev 0)
+++ qtbug-62044.patch   2018-02-22 12:53:35 UTC (rev 317391)
@@ -0,0 +1,50 @@
+From fd9fec4fc7f43fb939e8e5a946c7858390bbd9d3 Mon Sep 17 00:00:00 2001
+From: Johan Klokkhammer Helsing <johan.hels...@qt.io>
+Date: Thu, 8 Feb 2018 16:53:39 +0100
+Subject: [PATCH] Fix crash when connecting a new screen
+
+In QWaylandWindow::virtualSiblings, don't include screens that have not been
+added yet. I.e. QWaylandScreens for which QPlatformIntegration::screenAdded has
+not yet been called.
+
+There are two reasons why this crash wasn't covered by the
+removePrimaryScreen() test. First of all, the mock output didn't send
+wl_output.done events when updating the mode/geometry. These wayland events are
+what causes QWindowSystemInterface::handleScreenGeometryChange() to be called
+(where virtualSiblings are called).
+
+Furthermore, virtualSiblings is only called when the geometry actually changes,
+so add a new test that changes the screen geometry of the existing screen while
+a new one is being added (i.e. moves it to the right).
+
+Task-number: QTBUG-62044
+Change-Id: I623fbf8799d21c6b9293e7120ded301277639cc6
+Reviewed-by: David Edmundson <davidedmund...@kde.org>
+Reviewed-by: Aleix Pol
+Reviewed-by: Paul Olav Tvete <paul.tv...@qt.io>
+---
+ src/client/qwaylandscreen.cpp               |  6 ++++--
+ tests/auto/client/client/tst_client.cpp     | 25 +++++++++++++++++++++++++
+ tests/auto/client/shared/mockcompositor.cpp |  8 ++++++++
+ tests/auto/client/shared/mockcompositor.h   |  2 ++
+ tests/auto/client/shared/mockoutput.cpp     | 27 +++++++++++++++++++++++++--
+ tests/auto/client/shared/mockoutput.h       |  1 +
+ 6 files changed, 65 insertions(+), 4 deletions(-)
+
+diff --git a/src/client/qwaylandscreen.cpp b/src/client/qwaylandscreen.cpp
+index fba75557..1c9ce23b 100644
+--- a/src/client/qwaylandscreen.cpp
++++ b/src/client/qwaylandscreen.cpp
+@@ -138,8 +138,10 @@ QList<QPlatformScreen *> 
QWaylandScreen::virtualSiblings() const
+     QList<QPlatformScreen *> list;
+     const QList<QWaylandScreen*> screens = mWaylandDisplay->screens();
+     list.reserve(screens.count());
+-    foreach (QWaylandScreen *screen, screens)
+-        list << screen;
++    for (QWaylandScreen *screen : qAsConst(screens)) {
++        if (screen->screen())
++            list << screen;
++    }
+     return list;
+ }
+ 

Reply via email to