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 |
+} |