kde-plasma/kwin: Fix window sizing glitches, memleak/crash fixes

Upstream commit 77b678c522cce0e8e7b39087f74e2ac591cd28d0
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=445140

Upstream commit 8accc777a5b3ab1e53341f1838ed636652dc1221
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=444429
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=444381
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=444077
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=444429

Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
This commit is contained in:
Andreas Sturmlechner
2021-12-15 11:34:24 +01:00
parent e49bba8fee
commit 7a00137130
3 changed files with 225 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
From 8accc777a5b3ab1e53341f1838ed636652dc1221 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Mon, 13 Dec 2021 12:53:32 +0200
Subject: [PATCH] Fix memory leak in some plasma components
A few plasma components cache QSGTexture. Those components rely on
texture references going away with QSGNode users. However, with the
current tear down logic, OffscreenQuickView won't destroy any paint
nodes.
Destroy QQuickRenderControl before QQuickWindow to ensure that are no
paint nodes left alive after OffscreenQuickView.
BUG: 444429
BUG: 444381
BUG: 444077
BUG: 444306
(cherry picked from commit 64f2cdf9ed290a1fb7c2bf41753613078eb023c4)
---
src/libkwineffects/kwineffectquickview.cpp | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/libkwineffects/kwineffectquickview.cpp b/src/libkwineffects/kwineffectquickview.cpp
index ca5a025729..14be1e1b25 100644
--- a/src/libkwineffects/kwineffectquickview.cpp
+++ b/src/libkwineffects/kwineffectquickview.cpp
@@ -160,13 +160,15 @@ EffectQuickView::EffectQuickView(QObject *parent, QWindow *renderWindow, ExportM
EffectQuickView::~EffectQuickView()
{
if (d->m_glcontext) {
- d->m_glcontext->makeCurrent(d->m_offscreenSurface.data());
// close the view whilst we have an active GL context
- delete d->m_view;
- d->m_view = nullptr;
- d->m_renderControl->invalidate();
- d->m_glcontext->doneCurrent();
+ d->m_glcontext->makeCurrent(d->m_offscreenSurface.data());
}
+
+ delete d->m_renderControl; // Always delete render control first.
+ d->m_renderControl = nullptr;
+
+ delete d->m_view;
+ d->m_view = nullptr;
}
bool EffectQuickView::automaticRepaint() const
--
GitLab

View File

@@ -0,0 +1,36 @@
From 77b678c522cce0e8e7b39087f74e2ac591cd28d0 Mon Sep 17 00:00:00 2001
From: Ismael Asensio <isma.af@gmail.com>
Date: Sun, 12 Dec 2021 15:16:28 +0100
Subject: [PATCH] XDGShellClient: Protect from invalid frameGeometry on
updateDecoration
When updating window decoration do not try to restore the previous frameGeometry
if it was invalid.
This fixes the case when applying a `noBorder=true` rule on a newly created
client would set it to a minimal window size
Targeted at 5.23 only, since this codepath is being reworked for 5.24
BUG: 445140
FIXED-IN: 5.23.5
---
src/xdgshellclient.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/xdgshellclient.cpp b/src/xdgshellclient.cpp
index b4427b8cf7..75c4031498 100644
--- a/src/xdgshellclient.cpp
+++ b/src/xdgshellclient.cpp
@@ -637,7 +637,7 @@ void XdgToplevelClient::updateDecoration(bool check_workspace_pos, bool force)
scheduleConfigure();
}
updateShadow();
- if (check_workspace_pos) {
+ if (check_workspace_pos && oldFrameGeometry.isValid()) {
const QRect oldGeometryRestore = geometryRestore();
setGeometryRestore(frameGeometry());
checkWorkspacePosition(oldFrameGeometry, oldClientGeometry);
--
GitLab

View File

@@ -0,0 +1,139 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
ECM_HANDBOOK="optional"
ECM_TEST="optional"
KFMIN=5.86.0
PVCUT=$(ver_cut 1-3)
QTMIN=5.15.2
VIRTUALX_REQUIRED="test"
inherit ecm kde.org optfeature
DESCRIPTION="Flexible, composited Window Manager for windowing systems on Linux"
LICENSE="GPL-2+"
SLOT="5"
KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
IUSE="accessibility caps gles2-only multimedia plasma screencast"
RESTRICT="test"
COMMON_DEPEND="
>=dev-libs/libinput-1.14
>=dev-libs/wayland-1.2
>=dev-qt/qtdbus-${QTMIN}:5
>=dev-qt/qtdeclarative-${QTMIN}:5
>=dev-qt/qtgui-${QTMIN}:5=[gles2-only=,libinput]
>=dev-qt/qtwidgets-${QTMIN}:5
>=dev-qt/qtx11extras-${QTMIN}:5
>=kde-frameworks/kactivities-${KFMIN}:5
>=kde-frameworks/kauth-${KFMIN}:5
>=kde-frameworks/kcmutils-${KFMIN}:5
>=kde-frameworks/kcompletion-${KFMIN}:5
>=kde-frameworks/kconfig-${KFMIN}:5
>=kde-frameworks/kconfigwidgets-${KFMIN}:5
>=kde-frameworks/kcoreaddons-${KFMIN}:5
>=kde-frameworks/kcrash-${KFMIN}:5
>=kde-frameworks/kdeclarative-${KFMIN}:5
>=kde-frameworks/kglobalaccel-${KFMIN}:5=
>=kde-frameworks/ki18n-${KFMIN}:5
>=kde-frameworks/kiconthemes-${KFMIN}:5
>=kde-frameworks/kidletime-${KFMIN}:5=
>=kde-frameworks/knewstuff-${KFMIN}:5
>=kde-frameworks/knotifications-${KFMIN}:5
>=kde-frameworks/kpackage-${KFMIN}:5
>=kde-frameworks/kservice-${KFMIN}:5
>=kde-frameworks/ktextwidgets-${KFMIN}:5
>=kde-frameworks/kwayland-${KFMIN}:5
>=kde-frameworks/kwidgetsaddons-${KFMIN}:5
>=kde-frameworks/kwindowsystem-${KFMIN}:5=[X]
>=kde-frameworks/kxmlgui-${KFMIN}:5
>=kde-frameworks/plasma-${KFMIN}:5
>=kde-plasma/breeze-${PVCUT}:5
>=kde-plasma/kdecoration-${PVCUT}:5
>=kde-plasma/kscreenlocker-${PVCUT}:5
>=kde-plasma/kwayland-server-${PVCUT}:5
media-libs/fontconfig
media-libs/freetype
media-libs/lcms:2
media-libs/libepoxy
>=media-libs/mesa-21.1[egl(+),gbm(+),wayland,X]
virtual/libudev:=
x11-libs/libX11
x11-libs/libXi
x11-libs/libdrm
>=x11-libs/libxcb-1.10
>=x11-libs/libxkbcommon-0.7.0
x11-libs/xcb-util-cursor
x11-libs/xcb-util-image
x11-libs/xcb-util-keysyms
x11-libs/xcb-util-wm
accessibility? ( media-libs/libqaccessibilityclient:5 )
caps? ( sys-libs/libcap )
gles2-only? ( media-libs/mesa[gles2] )
plasma? ( >=kde-frameworks/krunner-${KFMIN}:5 )
screencast? ( >=media-video/pipewire-0.3:= )
"
RDEPEND="${COMMON_DEPEND}
>=dev-qt/qtquickcontrols-${QTMIN}:5
>=dev-qt/qtquickcontrols2-${QTMIN}:5
>=dev-qt/qtvirtualkeyboard-${QTMIN}:5
>=kde-frameworks/kirigami-${KFMIN}:5
>=kde-frameworks/kitemmodels-${KFMIN}:5[qml]
sys-apps/hwdata
x11-base/xwayland
multimedia? ( >=dev-qt/qtmultimedia-${QTMIN}:5[gstreamer,qml] )
"
DEPEND="${COMMON_DEPEND}
>=dev-qt/designer-${QTMIN}:5
>=dev-qt/qtconcurrent-${QTMIN}:5
x11-base/xorg-proto
test? (
>=dev-libs/wayland-protocols-1.19
>=dev-qt/qtwayland-${QTMIN}:5
)
"
PDEPEND=">=kde-plasma/kde-cli-tools-${PVCUT}:5"
PATCHES=(
"${FILESDIR}"/${P}-wayland-resize-to-last-requested-client-size.patch # KDE-bug 444962
"${FILESDIR}"/${P}-scripting-fix-KWinComponents-Workspace-type.patch
"${FILESDIR}"/${P}-drm-remove-dpms-filter-when-outputs-are-added.patch # KDE-bug 446699
"${FILESDIR}"/${P}-xdgshell-protect-from-invalid-frameGeometry.patch # KDE-bug 445140
"${FILESDIR}"/${P}-fix-memory-leak-caching-QSGTexture.patch # KDE-bug 444077 +more
)
src_prepare() {
ecm_src_prepare
use multimedia || eapply "${FILESDIR}/${PN}-5.21.80-gstreamer-optional.patch"
# TODO: try to get a build switch upstreamed
if ! use screencast; then
sed -e "s/^pkg_check_modules.*PipeWire/#&/" -i CMakeLists.txt || die
fi
}
src_configure() {
local mycmakeargs=(
$(cmake_use_find_package accessibility QAccessibilityClient)
$(cmake_use_find_package caps Libcap)
$(cmake_use_find_package plasma KF5Runner)
)
ecm_src_configure
}
pkg_postinst() {
ecm_pkg_postinst
optfeature "color management support" x11-misc/colord
elog
elog "In Plasma 5.20, default behavior of the Task Switcher to move minimised"
elog "windows to the end of the list was changed so that it remains in the"
elog "original order. To revert to the well established behavior:"
elog
elog " - Edit ~/.config/kwinrc"
elog " - Find [TabBox] section"
elog " - Add \"MoveMinimizedWindowsToEndOfTabBoxFocusChain=true\""
}