Gentoo Archives: gentoo-commits

From: Andreas Sturmlechner <asturm@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtgui/files/, dev-qt/qtgui/
Date: Sun, 04 Oct 2020 16:07:23
Message-Id: 1601826846.5e4b74cf31c4478d491f577d5746e4024b3ea552.asturm@gentoo
1 commit: 5e4b74cf31c4478d491f577d5746e4024b3ea552
2 Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
3 AuthorDate: Fri Oct 2 19:36:04 2020 +0000
4 Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
5 CommitDate: Sun Oct 4 15:54:06 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5e4b74cf
7
8 dev-qt/qtgui: Fix multiscreen regression
9
10 "There is a bug in Qt 5.15.1 that seriously affects multiscreen. We get
11 a bunch of reports every day. Effectively a screen change signal goes
12 missing and Plasma naturally breaks."
13
14 See also: https://mail.kde.org/pipermail/distributions/2020-September/000866.html
15 KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=426496
16 QTBUG: https://bugreports.qt.io/browse/QTBUG-86604
17 Cherry-picked from: https://codereview.qt-project.org/c/qt/qtbase/+/315721
18
19 Package-Manager: Portage-3.0.8, Repoman-3.0.1
20 Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
21
22 ...-qscreen-geometrychanged-when-dpi-changes.patch | 86 ++++++++++
23 dev-qt/qtgui/qtgui-5.15.1-r1.ebuild | 185 +++++++++++++++++++++
24 2 files changed, 271 insertions(+)
25
26 diff --git a/dev-qt/qtgui/files/qtgui-5.15.1-emit-qscreen-geometrychanged-when-dpi-changes.patch b/dev-qt/qtgui/files/qtgui-5.15.1-emit-qscreen-geometrychanged-when-dpi-changes.patch
27 new file mode 100644
28 index 00000000000..3e4187b22a0
29 --- /dev/null
30 +++ b/dev-qt/qtgui/files/qtgui-5.15.1-emit-qscreen-geometrychanged-when-dpi-changes.patch
31 @@ -0,0 +1,86 @@
32 +From 65243ad7aef48af4689ea4454916b504025b5051 Mon Sep 17 00:00:00 2001
33 +From: Friedemann Kleint <Friedemann.Kleint@××.io>
34 +Date: Fri, 25 Sep 2020 14:10:58 +0200
35 +Subject: [PATCH] Emit QScreen::geometryChanged when the logical DPI changes
36 +
37 +Add the missing call to QScreenPrivate::emitGeometryChangeSignals()
38 +along with an emission of physicalDotsPerInchChanged()
39 +since that is calculated from geometry and physical size.
40 +
41 +Rearrange the code in
42 +QGuiApplicationPrivate::processScreenGeometryChange()
43 +to prevent duplicate emissions of geometryChanged(),
44 +physicalDotsPerInchChanged() which this change would introduce.
45 +
46 +Amends 5290027e3bab75f14fc0a2b7c206594d9cb91e76.
47 +
48 +Task-number: QTBUG-76902
49 +Task-number: QTBUG-79248
50 +Fixes: QTBUG-86604
51 +Change-Id: I3dc2ec5ccd9c6413e92f9246242f323e8afc5e57
52 +Reviewed-by: David Edmundson <davidedmundson@×××.org>
53 +(cherry picked from commit 5c7307775d32ae0a54acad8ae7a1c9d3cff7d45e)
54 +Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@××××××××××.org>
55 +---
56 + src/gui/kernel/qguiapplication.cpp | 11 +++++------
57 + src/gui/kernel/qscreen.cpp | 6 ++++++
58 + 2 files changed, 11 insertions(+), 6 deletions(-)
59 +
60 +diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
61 +index 239a78313c5..ef090605819 100644
62 +--- a/src/gui/kernel/qguiapplication.cpp
63 ++++ b/src/gui/kernel/qguiapplication.cpp
64 +@@ -3162,13 +3162,14 @@ void QGuiApplicationPrivate::processScreenGeometryChange(QWindowSystemInterfaceP
65 + bool availableGeometryChanged = e->availableGeometry != s->d_func()->availableGeometry;
66 + s->d_func()->availableGeometry = e->availableGeometry;
67 +
68 +- if (geometryChanged) {
69 +- Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
70 ++ const Qt::ScreenOrientation primaryOrientation = s->primaryOrientation();
71 ++ if (geometryChanged)
72 + s->d_func()->updatePrimaryOrientation();
73 +
74 +- emit s->geometryChanged(s->geometry());
75 ++ s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
76 ++
77 ++ if (geometryChanged) {
78 + emit s->physicalSizeChanged(s->physicalSize());
79 +- emit s->physicalDotsPerInchChanged(s->physicalDotsPerInch());
80 + emit s->logicalDotsPerInchChanged(s->logicalDotsPerInch());
81 +
82 + if (s->primaryOrientation() != primaryOrientation)
83 +@@ -3178,8 +3179,6 @@ void QGuiApplicationPrivate::processScreenGeometryChange(QWindowSystemInterfaceP
84 + updateFilteredScreenOrientation(s);
85 + }
86 +
87 +- s->d_func()->emitGeometryChangeSignals(geometryChanged, availableGeometryChanged);
88 +-
89 + resetCachedDevicePixelRatio();
90 + }
91 +
92 +diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
93 +index df628fcc73a..a1afc1ba143 100644
94 +--- a/src/gui/kernel/qscreen.cpp
95 ++++ b/src/gui/kernel/qscreen.cpp
96 +@@ -88,6 +88,9 @@ void QScreenPrivate::updateGeometriesWithSignals()
97 + void QScreenPrivate::emitGeometryChangeSignals(bool geometryChanged, bool availableGeometryChanged)
98 + {
99 + Q_Q(QScreen);
100 ++ if (geometryChanged)
101 ++ emit q->geometryChanged(geometry);
102 ++
103 + if (availableGeometryChanged)
104 + emit q->availableGeometryChanged(availableGeometry);
105 +
106 +@@ -96,6 +99,9 @@ void QScreenPrivate::emitGeometryChangeSignals(bool geometryChanged, bool availa
107 + for (QScreen* sibling : siblings)
108 + emit sibling->virtualGeometryChanged(sibling->virtualGeometry());
109 + }
110 ++
111 ++ if (geometryChanged)
112 ++ emit q->physicalDotsPerInchChanged(q->physicalDotsPerInch());
113 + }
114 +
115 + void QScreenPrivate::setPlatformScreen(QPlatformScreen *screen)
116 +--
117 +2.16.3
118
119 diff --git a/dev-qt/qtgui/qtgui-5.15.1-r1.ebuild b/dev-qt/qtgui/qtgui-5.15.1-r1.ebuild
120 new file mode 100644
121 index 00000000000..be95e1eff6b
122 --- /dev/null
123 +++ b/dev-qt/qtgui/qtgui-5.15.1-r1.ebuild
124 @@ -0,0 +1,185 @@
125 +# Copyright 1999-2020 Gentoo Authors
126 +# Distributed under the terms of the GNU General Public License v2
127 +
128 +EAPI=7
129 +
130 +QT5_MODULE="qtbase"
131 +inherit qt5-build
132 +
133 +DESCRIPTION="The GUI module and platform plugins for the Qt5 framework"
134 +SLOT=5/$(ver_cut 1-3) # bug 707658
135 +
136 +if [[ ${QT5_BUILD_TYPE} == release ]]; then
137 + KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~sparc ~x86"
138 +fi
139 +
140 +# TODO: linuxfb
141 +
142 +IUSE="accessibility dbus egl eglfs evdev +gif gles2-only ibus jpeg
143 + +libinput +png tslib tuio +udev vnc vulkan wayland +X"
144 +REQUIRED_USE="
145 + || ( eglfs X )
146 + accessibility? ( dbus X )
147 + eglfs? ( egl )
148 + ibus? ( dbus )
149 + libinput? ( udev )
150 + X? ( gles2-only? ( egl ) )
151 +"
152 +
153 +RDEPEND="
154 + dev-libs/glib:2
155 + ~dev-qt/qtcore-${PV}:5=
156 + dev-util/gtk-update-icon-cache
157 + media-libs/fontconfig
158 + >=media-libs/freetype-2.6.1:2
159 + >=media-libs/harfbuzz-1.6.0:=
160 + sys-libs/zlib:=
161 + dbus? ( ~dev-qt/qtdbus-${PV} )
162 + egl? ( media-libs/mesa[egl] )
163 + eglfs? (
164 + media-libs/mesa[gbm]
165 + x11-libs/libdrm
166 + )
167 + evdev? ( sys-libs/mtdev )
168 + gles2-only? ( media-libs/mesa[gles2] )
169 + !gles2-only? ( virtual/opengl )
170 + jpeg? ( virtual/jpeg:0 )
171 + libinput? (
172 + dev-libs/libinput:=
173 + >=x11-libs/libxkbcommon-0.5.0
174 + )
175 + png? ( media-libs/libpng:0= )
176 + tslib? ( >=x11-libs/tslib-1.21 )
177 + tuio? ( ~dev-qt/qtnetwork-${PV} )
178 + udev? ( virtual/libudev:= )
179 + vnc? ( ~dev-qt/qtnetwork-${PV} )
180 + vulkan? ( dev-util/vulkan-headers )
181 + X? (
182 + x11-libs/libICE
183 + x11-libs/libSM
184 + x11-libs/libX11
185 + >=x11-libs/libxcb-1.12:=[xkb]
186 + >=x11-libs/libxkbcommon-0.5.0[X]
187 + x11-libs/xcb-util-image
188 + x11-libs/xcb-util-keysyms
189 + x11-libs/xcb-util-renderutil
190 + x11-libs/xcb-util-wm
191 + )
192 +"
193 +DEPEND="${RDEPEND}
194 + evdev? ( sys-kernel/linux-headers )
195 + udev? ( sys-kernel/linux-headers )
196 +"
197 +PDEPEND="
198 + ibus? ( app-i18n/ibus )
199 + wayland? ( ~dev-qt/qtwayland-${PV} )
200 +"
201 +
202 +QT5_TARGET_SUBDIRS=(
203 + src/tools/qvkgen
204 + src/gui
205 + src/openglextensions
206 + src/platformheaders
207 + src/platformsupport
208 + src/plugins/generic
209 + src/plugins/imageformats
210 + src/plugins/platforms
211 + src/plugins/platforminputcontexts
212 +)
213 +
214 +QT5_GENTOO_CONFIG=(
215 + accessibility:accessibility-atspi-bridge
216 + egl:egl:
217 + eglfs:eglfs:
218 + eglfs:eglfs_egldevice:
219 + eglfs:eglfs_gbm:
220 + evdev:evdev:
221 + evdev:mtdev:
222 + :fontconfig:
223 + :system-freetype:FREETYPE
224 + !:no-freetype:
225 + !gif:no-gif:
226 + gles2-only::OPENGL_ES
227 + gles2-only:opengles2:OPENGL_ES_2
228 + !:no-gui:
229 + :system-harfbuzz:
230 + !:no-harfbuzz:
231 + jpeg:system-jpeg:IMAGEFORMAT_JPEG
232 + !jpeg:no-jpeg:
233 + libinput
234 + libinput:xkbcommon:
235 + :opengl
236 + png:png:
237 + png:system-png:IMAGEFORMAT_PNG
238 + !png:no-png:
239 + tslib:tslib:
240 + udev:libudev:
241 + vulkan:vulkan:
242 + X:xcb:
243 + X:xcb-glx:
244 + X:xcb-plugin:
245 + X:xcb-render:
246 + X:xcb-sm:
247 + X:xcb-xlib:
248 + X:xcb-xinput:
249 +)
250 +
251 +QT5_GENTOO_PRIVATE_CONFIG=(
252 + :gui
253 +)
254 +
255 +PATCHES=(
256 + "${FILESDIR}/qt-5.12-gcc-avx2.patch" # bug 672946
257 + "${FILESDIR}/${PN}-5.14.1-cmake-macro-backward-compat.patch" # bug 703306
258 + "${FILESDIR}/${P}-emit-qscreen-geometrychanged-when-dpi-changes.patch" # QTBUG-86604
259 +)
260 +
261 +src_prepare() {
262 + # don't add -O3 to CXXFLAGS, bug 549140
263 + sed -i -e '/CONFIG\s*+=/s/optimize_full//' src/gui/gui.pro || die
264 +
265 + # egl_x11 is activated when both egl and X are enabled
266 + use egl && QT5_GENTOO_CONFIG+=(X:egl_x11:) || QT5_GENTOO_CONFIG+=(egl:egl_x11:)
267 +
268 + qt_use_disable_config dbus dbus \
269 + src/platformsupport/themes/genericunix/genericunix.pri
270 +
271 + qt_use_disable_config tuio tuiotouch src/plugins/generic/generic.pro
272 +
273 + qt_use_disable_mod ibus dbus \
274 + src/plugins/platforminputcontexts/platforminputcontexts.pro
275 +
276 + use vnc || sed -i -e '/SUBDIRS += vnc/d' \
277 + src/plugins/platforms/platforms.pro || die
278 +
279 + qt5-build_src_prepare
280 +}
281 +
282 +src_configure() {
283 + local myconf=(
284 + $(usex dbus -dbus-linked '')
285 + $(qt_use egl)
286 + $(qt_use eglfs)
287 + $(usex eglfs '-gbm -kms' '')
288 + $(qt_use evdev)
289 + $(qt_use evdev mtdev)
290 + -fontconfig
291 + -system-freetype
292 + $(usex gif '' -no-gif)
293 + -gui
294 + -system-harfbuzz
295 + $(qt_use jpeg libjpeg system)
296 + $(qt_use libinput)
297 + -opengl $(usex gles2-only es2 desktop)
298 + $(qt_use png libpng system)
299 + $(qt_use tslib)
300 + $(qt_use udev libudev)
301 + $(qt_use vulkan)
302 + $(qt_use X xcb)
303 + $(usex X '-xcb-xlib' '')
304 + )
305 + if use libinput || use X; then
306 + myconf+=( -xkbcommon )
307 + fi
308 + qt5-build_src_configure
309 +}