author | Antonio Rojas
<arojas@archlinux.org> 2018-02-22 12:53:35 UTC |
committer | Antonio Rojas
<arojas@archlinux.org> 2018-02-22 12:53:35 UTC |
parent | 444af20e082203513a57320b4c3b97daa42a6044 |
PKGBUILD | +6 | -3 |
qtbug-62044.patch | +50 | -0 |
diff --git a/PKGBUILD b/PKGBUILD index dbb0026..ce6f7af 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -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,15 +14,18 @@ depends=('qt5-declarative' 'libxcomposite' 'wayland') # namcap note: wayland is 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 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() { diff --git a/qtbug-62044.patch b/qtbug-62044.patch new file mode 100644 index 0000000..caf3f74 --- /dev/null +++ b/qtbug-62044.patch @@ -0,0 +1,50 @@ +From fd9fec4fc7f43fb939e8e5a946c7858390bbd9d3 Mon Sep 17 00:00:00 2001 +From: Johan Klokkhammer Helsing <johan.helsing@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 <davidedmundson@kde.org> +Reviewed-by: Aleix Pol +Reviewed-by: Paul Olav Tvete <paul.tvete@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; + } +