commit: 2bca6ba8b0bdacccb883071046b7a9b50ce32231 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Tue Feb 18 18:57:14 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Tue Feb 18 18:58:05 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2bca6ba8
kde-plasma/kwin: pull in workaround for GCC 15 Pull in workaround from upstream PR at https://invent.kde.org/plasma/kwin/-/merge_requests/7191. (There's changes requested before it gets merged but they're cosmetic.) No revbump as 6.3.1 was just pushed. Bug: https://bugs.kde.org/show_bug.cgi?id=500310 Bug: https://gcc.gnu.org/PR118923 Thanks-to: Kacper Słomiński <kacper.slominski72 <AT> gmail.com> Signed-off-by: Sam James <sam <AT> gentoo.org> .../kwin/files/kwin-6.3.1-gcc15-workaround.patch | 92 ++++++++++++++++++++++ kde-plasma/kwin/kwin-6.3.1.ebuild | 4 + 2 files changed, 96 insertions(+) diff --git a/kde-plasma/kwin/files/kwin-6.3.1-gcc15-workaround.patch b/kde-plasma/kwin/files/kwin-6.3.1-gcc15-workaround.patch new file mode 100644 index 000000000000..3990682a5f9d --- /dev/null +++ b/kde-plasma/kwin/files/kwin-6.3.1-gcc15-workaround.patch @@ -0,0 +1,92 @@ +https://invent.kde.org/plasma/kwin/-/merge_requests/7191 +https://bugs.kde.org/show_bug.cgi?id=500310 +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118923 + +From 4d9a024f1b2f502de9a33024a2a762aefa4007cd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Kacper=20S=C5=82omi=C5=84ski?= + <[email protected]> +Date: Tue, 18 Feb 2025 18:16:59 +0100 +Subject: [PATCH] Factor out {previousRestricted,restricted}MoveArea calls out + of loops + +This works around a GCC 15 bug that causes KWin to crash. + +BUG: 500310 +--- + src/window.cpp | 24 ++++++++++++++++-------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +diff --git a/src/window.cpp b/src/window.cpp +index a05771e90c..1a56560280 100644 +--- a/src/window.cpp ++++ b/src/window.cpp +@@ -4026,25 +4026,29 @@ void Window::checkWorkspacePosition(QRectF oldGeometry, const VirtualDesktop *ol + auto moveAreaFunc = workspace()->inRearrange() ? &Workspace::previousRestrictedMoveArea : //... the restricted areas changed + &Workspace::restrictedMoveArea; //... when e.g. active desktop or screen changes + +- for (const QRect &r : (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaTop)) { ++ const auto oldRectsTop = (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaTop); ++ for (const QRect &r : oldRectsTop) { + QRect rect = r & oldGeomTall; + if (!rect.isEmpty()) { + oldTopMax = std::max(oldTopMax, rect.y() + rect.height()); + } + } +- for (const QRect &r : (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaRight)) { ++ const auto oldRectsRight = (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaRight); ++ for (const QRect &r : oldRectsRight) { + QRect rect = r & oldGeomWide; + if (!rect.isEmpty()) { + oldRightMax = std::min(oldRightMax, rect.x()); + } + } +- for (const QRect &r : (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaBottom)) { ++ const auto oldRectsBottom = (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaBottom); ++ for (const QRect &r : oldRectsBottom) { + QRect rect = r & oldGeomTall; + if (!rect.isEmpty()) { + oldBottomMax = std::min(oldBottomMax, rect.y()); + } + } +- for (const QRect &r : (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaLeft)) { ++ const auto oldRectsLeft = (workspace()->*moveAreaFunc)(oldDesktop, StrutAreaLeft); ++ for (const QRect &r : oldRectsLeft) { + QRect rect = r & oldGeomWide; + if (!rect.isEmpty()) { + oldLeftMax = std::max(oldLeftMax, rect.x() + rect.width()); +@@ -4052,25 +4056,29 @@ void Window::checkWorkspacePosition(QRectF oldGeometry, const VirtualDesktop *ol + } + + // These 4 compute new bounds +- for (const QRect &r : workspace()->restrictedMoveArea(desktop, StrutAreaTop)) { ++ const auto newRectsTop = workspace()->restrictedMoveArea(desktop, StrutAreaTop); ++ for (const QRect &r : newRectsTop) { + QRect rect = r & newGeomTall; + if (!rect.isEmpty()) { + topMax = std::max(topMax, rect.y() + rect.height()); + } + } +- for (const QRect &r : workspace()->restrictedMoveArea(desktop, StrutAreaRight)) { ++ const auto newRectsRight = workspace()->restrictedMoveArea(desktop, StrutAreaRight); ++ for (const QRect &r : newRectsRight) { + QRect rect = r & newGeomWide; + if (!rect.isEmpty()) { + rightMax = std::min(rightMax, rect.x()); + } + } +- for (const QRect &r : workspace()->restrictedMoveArea(desktop, StrutAreaBottom)) { ++ const auto newRectsBottom = workspace()->restrictedMoveArea(desktop, StrutAreaBottom); ++ for (const QRect &r : newRectsBottom) { + QRect rect = r & newGeomTall; + if (!rect.isEmpty()) { + bottomMax = std::min(bottomMax, rect.y()); + } + } +- for (const QRect &r : workspace()->restrictedMoveArea(desktop, StrutAreaLeft)) { ++ const auto newRectsLeft = workspace()->restrictedMoveArea(desktop, StrutAreaLeft); ++ for (const QRect &r : newRectsLeft) { + QRect rect = r & newGeomWide; + if (!rect.isEmpty()) { + leftMax = std::max(leftMax, rect.x() + rect.width()); +-- +GitLab diff --git a/kde-plasma/kwin/kwin-6.3.1.ebuild b/kde-plasma/kwin/kwin-6.3.1.ebuild index b500c5ad9597..26d567553ec5 100644 --- a/kde-plasma/kwin/kwin-6.3.1.ebuild +++ b/kde-plasma/kwin/kwin-6.3.1.ebuild @@ -114,6 +114,10 @@ BDEPEND=" # -m 0755 to avoid suid with USE="-filecaps" FILECAPS=( -m 0755 cap_sys_nice=ep usr/bin/kwin_wayland ) +PATCHES=( + "${FILESDIR}"/${P}-gcc15-workaround.patch +) + src_prepare() { ecm_src_prepare
