Gentoo Archives: gentoo-commits

From: Michael Palimaka <kensington@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: kde-plasma/libkscreen/files/, kde-plasma/libkscreen/
Date: Wed, 27 Jul 2016 14:20:27
Message-Id: 1469629212.bbc537ce8c7c2e6e9f8b986deb14ae06d2e50502.kensington@gentoo
1 commit: bbc537ce8c7c2e6e9f8b986deb14ae06d2e50502
2 Author: Andreas Sturmlechner <andreas.sturmlechner <AT> gmail <DOT> com>
3 AuthorDate: Tue Jul 26 16:02:43 2016 +0000
4 Commit: Michael Palimaka <kensington <AT> gentoo <DOT> org>
5 CommitDate: Wed Jul 27 14:20:12 2016 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bbc537ce
7
8 kde-plasma/libkscreen: Fix load KScreen config at startup and crash on close
9
10 Reported-by: uraes (Gentoo Forums)
11
12 See also: https://forums.gentoo.org/viewtopic-p-7948292.html
13
14 Package-Manager: portage-2.2.28
15
16 .../files/libkscreen-5.6.5-config-fix.patch | 32 +++++++++++
17 .../files/libkscreen-5.6.5-fix-crash.patch | 66 ++++++++++++++++++++++
18 kde-plasma/libkscreen/libkscreen-5.6.5-r1.ebuild | 41 ++++++++++++++
19 3 files changed, 139 insertions(+)
20
21 diff --git a/kde-plasma/libkscreen/files/libkscreen-5.6.5-config-fix.patch b/kde-plasma/libkscreen/files/libkscreen-5.6.5-config-fix.patch
22 new file mode 100644
23 index 0000000..3455f63
24 --- /dev/null
25 +++ b/kde-plasma/libkscreen/files/libkscreen-5.6.5-config-fix.patch
26 @@ -0,0 +1,32 @@
27 +commit 3cd70aa1cef0b4aab8c13bba049e5b1ccd6ae1ab
28 +Author: Kai Uwe Broulik <kde@××××××××××××××.de>
29 +Date: Thu Jun 2 10:39:02 2016 +0200
30 +
31 + [Backend Manager] emitBackendReady() only after fetching the config finishes
32 +
33 + Without a valid config in the BackendManager, KScreen::Config::canBeApplied always
34 + returns false sometimes causing KScreen to ignore stored config on startup.
35 + Wait until we have a config before telling that the backend is ready.
36 +
37 + REVIEW: 128074
38 +
39 +diff --git a/src/backendmanager.cpp b/src/backendmanager.cpp
40 +index 570f575..676bb5d 100644
41 +--- a/src/backendmanager.cpp
42 ++++ b/src/backendmanager.cpp
43 +@@ -353,14 +353,13 @@ void BackendManager::onBackendRequestDone(QDBusPendingCallWatcher *watcher)
44 + connect(new GetConfigOperation(GetConfigOperation::NoEDID), &GetConfigOperation::finished,
45 + [&](ConfigOperation *op) {
46 + mConfig = qobject_cast<GetConfigOperation*>(op)->config();
47 ++ emitBackendReady();
48 + });
49 + // And listen for its change.
50 + connect(mInterface, &org::kde::kscreen::Backend::configChanged,
51 + [&](const QVariantMap &newConfig) {
52 + mConfig = KScreen::ConfigSerializer::deserializeConfig(newConfig);
53 + });
54 +-
55 +- emitBackendReady();
56 + }
57 +
58 + void BackendManager::backendServiceUnregistered(const QString &serviceName)
59
60 diff --git a/kde-plasma/libkscreen/files/libkscreen-5.6.5-fix-crash.patch b/kde-plasma/libkscreen/files/libkscreen-5.6.5-fix-crash.patch
61 new file mode 100644
62 index 0000000..71dc5f3
63 --- /dev/null
64 +++ b/kde-plasma/libkscreen/files/libkscreen-5.6.5-fix-crash.patch
65 @@ -0,0 +1,66 @@
66 +commit a0219e9d8292b70ac3ffa632a9c48cdcee44c9fb
67 +Author: Sebastian Kügler <sebas@×××.org>
68 +Date: Tue Jun 7 14:35:11 2016 +0200
69 +
70 + Fix crasher on application quit, bump Qt dep to 5.4
71 +
72 + Something changed inside QScreen, and now we get invalid objects during
73 + teardown, where they previously were still accessible. Qt has "new" API
74 + as of 5.4 so use that and prevent the crash from happening.
75 +
76 + REVIEWED-BY:Aleix Pol
77 +
78 +diff --git a/CMakeLists.txt b/CMakeLists.txt
79 +index 9c834d9..1f6f890 100644
80 +--- a/CMakeLists.txt
81 ++++ b/CMakeLists.txt
82 +@@ -16,7 +16,7 @@ include(ECMQtDeclareLoggingCategory)
83 + include(FeatureSummary)
84 + include(CheckCXXCompilerFlag)
85 +
86 +-set(REQUIRED_QT_VERSION 5.2.0)
87 ++set(REQUIRED_QT_VERSION 5.4.0)
88 + find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core DBus Gui Test X11Extras)
89 +
90 + # Wayland backend
91 +diff --git a/backends/qscreen/qscreenconfig.cpp b/backends/qscreen/qscreenconfig.cpp
92 +index c3c69db..156d973 100644
93 +--- a/backends/qscreen/qscreenconfig.cpp
94 ++++ b/backends/qscreen/qscreenconfig.cpp
95 +@@ -39,6 +39,7 @@ QScreenConfig::QScreenConfig(QObject *parent)
96 + }
97 + m_blockSignals = false;
98 + connect(qApp, &QGuiApplication::screenAdded, this, &QScreenConfig::screenAdded);
99 ++ connect(qApp, &QGuiApplication::screenRemoved, this, &QScreenConfig::screenRemoved);
100 + }
101 +
102 + QScreenConfig::~QScreenConfig()
103 +@@ -75,14 +76,12 @@ void QScreenConfig::screenAdded(const QScreen *qscreen)
104 + qscreenoutput->setId(outputId(qscreen));
105 + m_outputMap.insert(qscreenoutput->id(), qscreenoutput);
106 +
107 +- connect(qscreen, &QObject::destroyed, this, &QScreenConfig::screenDestroyed);
108 +-
109 + if (!m_blockSignals) {
110 + Q_EMIT configChanged(toKScreenConfig());
111 + }
112 + }
113 +
114 +-void QScreenConfig::screenDestroyed(QObject *qscreen)
115 ++void QScreenConfig::screenRemoved(QScreen *qscreen)
116 + {
117 + qCDebug(KSCREEN_QSCREEN) << "Screen removed" << qscreen << QGuiApplication::screens().count();
118 + // Find output matching the QScreen object and remove it
119 +diff --git a/backends/qscreen/qscreenconfig.h b/backends/qscreen/qscreenconfig.h
120 +index 1dfcc95..2c80eed 100644
121 +--- a/backends/qscreen/qscreenconfig.h
122 ++++ b/backends/qscreen/qscreenconfig.h
123 +@@ -45,7 +45,7 @@ public:
124 +
125 + private Q_SLOTS:
126 + void screenAdded(const QScreen *qscreen);
127 +- void screenDestroyed(QObject *qscreen = 0);
128 ++ void screenRemoved(QScreen *qscreen);
129 +
130 + Q_SIGNALS:
131 + void configChanged(const KScreen::ConfigPtr &config);
132
133 diff --git a/kde-plasma/libkscreen/libkscreen-5.6.5-r1.ebuild b/kde-plasma/libkscreen/libkscreen-5.6.5-r1.ebuild
134 new file mode 100644
135 index 0000000..cbdb889
136 --- /dev/null
137 +++ b/kde-plasma/libkscreen/libkscreen-5.6.5-r1.ebuild
138 @@ -0,0 +1,41 @@
139 +# Copyright 1999-2016 Gentoo Foundation
140 +# Distributed under the terms of the GNU General Public License v2
141 +# $Id$
142 +
143 +EAPI=6
144 +
145 +KDE_TEST="forceoptional"
146 +VIRTUALX_REQUIRED="test"
147 +inherit kde5
148 +
149 +DESCRIPTION="Plasma screen management library"
150 +SLOT="5/7"
151 +KEYWORDS="~amd64 ~arm ~x86"
152 +IUSE="X"
153 +
154 +DEPEND="
155 + $(add_frameworks_dep kwayland)
156 + $(add_qt_dep qtdbus)
157 + $(add_qt_dep qtgui)
158 + $(add_qt_dep qtx11extras)
159 + X? ( x11-libs/libxcb )
160 +"
161 +RDEPEND="${DEPEND}
162 + !x11-libs/libkscreen:5
163 +"
164 +
165 +PATCHES=(
166 + "${FILESDIR}/${P}-config-fix.patch"
167 + "${FILESDIR}/${P}-fix-crash.patch"
168 +)
169 +
170 +# requires running session
171 +RESTRICT="test"
172 +
173 +src_configure() {
174 + local mycmakeargs=(
175 + $(cmake-utils_use_find_package X XCB)
176 + )
177 +
178 + kde5_src_configure
179 +}