summaryrefslogtreecommitdiff
path: root/kde-plasma/kwin
diff options
context:
space:
mode:
Diffstat (limited to 'kde-plasma/kwin')
-rw-r--r--kde-plasma/kwin/Manifest24
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-backends-drm-dont-perm-disable-vrr.patch32
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-backends-drm-fetch-immutable-blobs.patch214
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-dont-send-geom-to-text-input.patch26
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-dont-use-xcb-in-wayland.patch41
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-fix-current-VD-always-added.patch50
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-fix-unlocking-wayland-sessions.patch44
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-waylandserver-lockScreenShown.patch93
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-waylandserver-move-LockScreenPresentationWatcher.patch36
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.4-xdgactivation-demand-attention.patch32
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-effects-overview-hide-panels.patch65
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-fix-multi-gpu-double-copy.patch59
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-fix-nvidia-render-glitches.patch42
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch307
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch35
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-tabbox-dont-dismiss-popups.patch32
-rw-r--r--kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch32
-rw-r--r--kde-plasma/kwin/kwin-5.24.5-r2.ebuild (renamed from kde-plasma/kwin/kwin-5.24.5.ebuild)11
-rw-r--r--kde-plasma/kwin/kwin-5.25.2.ebuild (renamed from kde-plasma/kwin/kwin-5.24.4-r1.ebuild)51
-rw-r--r--kde-plasma/kwin/metadata.xml1
20 files changed, 616 insertions, 611 deletions
diff --git a/kde-plasma/kwin/Manifest b/kde-plasma/kwin/Manifest
index 777a8684cab2..f65b72a3bb64 100644
--- a/kde-plasma/kwin/Manifest
+++ b/kde-plasma/kwin/Manifest
@@ -1,15 +1,13 @@
AUX kwin-5.21.80-gstreamer-optional.patch 971 BLAKE2B f31d18f865a9108ff1bfb711ea95a281295487090be982719a8623faeb5fbc645b8c55468fdfa8482fc052b1546bb2445e4b150c10b239e1ca149f1402b97bff SHA512 cf08106ca39cb455044c47da104b66eb470b72573803a3a1fd6be0eaa58f80b9b7a163898a3234f28552214a1aa3d651f633490377bf87ec4d883878b115b7bc
-AUX kwin-5.24.4-backends-drm-dont-perm-disable-vrr.patch 1143 BLAKE2B cf2957ffe9739826f31b4d9cb3657d4fa3eded789ba1bc3125c54a5d8aa6d32438c85d7305b64cbcc0e5e05220725001e5af3afa892ec06d6622cdca35b3de38 SHA512 fef2abe755ecf613df95fa85c3e12a083afa04d56262564c90c4a9a6f088f32986056bf9b4b85ff9ecc407c223d4f1f480c84394321a087048f58c72a71a557b
-AUX kwin-5.24.4-backends-drm-fetch-immutable-blobs.patch 8361 BLAKE2B bbf3478d265290fd50597e063205404551243e30f157fa58a448e1b6b644f39c55a7b526d125fc399487e9cc36795e27e9ba793d1cd5ba19899a9eb56c1b0fd3 SHA512 28d981819f0d81e6498ad8c92cd9bd96808ab5b11cba946cef5318da273b4f107e0fcdeffc80bb46e5865d69a8bf50eb5febc3d2eb1ec3ac716495af3a030091
-AUX kwin-5.24.4-dont-send-geom-to-text-input.patch 1119 BLAKE2B ff8b13dfca5be2d0a3603599e80ed3b666ea61bfaddbcc19af57b70a82077d41736e0a3919a9c386e8d76233abdf6a9ddbc87e1a46a564c07dff98a2c60ee4bf SHA512 9388a6dac9c9c2a35c9eb6093571ff0f275a1720ac9a703c1dc134f06dfb7be4e0806ef26765b7cd3be4d53fef342345f2bba0980bfebf92fe8c5368c915d20a
-AUX kwin-5.24.4-dont-use-xcb-in-wayland.patch 1593 BLAKE2B ddee202fb073af4331c77ea1013cb3b779a4ce8c6d5a6adeae9035edf051b1b6cce708ac64719e6d04c0cfa3a7e76599e233714c7137f05d8c9480293b95d6e0 SHA512 62a99855da7ec06ac35bd790d5d5bcc40c7e91ef5c66d99dae8bf8015742b9c9de60a52f565a0872cfa3e89ccfa26d2a62a223ec1d07fa97983e1ef508937b93
-AUX kwin-5.24.4-fix-current-VD-always-added.patch 1904 BLAKE2B bc8fbc8548e9e379281736ae2e388f81e11a61a7e881fd3b0bc87781cbd0d2dac15baa62a8a0ed501a3b92468f4bb729ce582b07953625e607bea1317ffdb17f SHA512 96ab4ebd818dc89055a66327c63cc8beca46d0797911d59c03125bfa0a07f602cfcefbf76a34648050c44e054dcc2b6f0c01f4531155438e504096436f806695
-AUX kwin-5.24.4-fix-unlocking-wayland-sessions.patch 1353 BLAKE2B 23dc90586cb7743a5009f5d4c7ffd4473a1df0ba62da8e55c3eb883dfc609b4d58483397b5f529e50e7beea4244416a32cf8bd2bf4220da1c9a1939b06385dbd SHA512 62e57a20a7de142f8ac8c4007a92f4cfa5fdcef7c06e5b2a706b610aa91d1268b9d88f725166477ba5438651787db37546b173e3b18fbe28f2dd2480e3ce564a
-AUX kwin-5.24.4-waylandserver-lockScreenShown.patch 3721 BLAKE2B 70b8cd4bf8a571190c51e6b47427d875319726e1459f0084349d66adb77691b0cd6612192d8103e18e1b6f17335ac8e787c2a029703a44d5899c84d377914ad4 SHA512 5e30c5bfdc2fad74944f87d1e09d1a8a2bb4a64b31b1e8920814e3c680b6d5372b14f6abc356bbcbab77d8aaa6a4838549c881c7000e2b856138bf1fa765ab1f
-AUX kwin-5.24.4-waylandserver-move-LockScreenPresentationWatcher.patch 1306 BLAKE2B 5511bb0c43c60df298cefe4ed53b76c906fb9935054cfbdc4c628425d3111e727d85b16b222e4d4b8a55908aec898536696594d929b56db23d8fe4cd1bcca82b SHA512 e672bf722b19e339b159710d3775f22f3d081c96b80a30d0f58d1bb078ddd4279aa402e1111b0612cbbeed36907d021755bd80fe7753aff1a67276681e390ea5
-AUX kwin-5.24.4-xdgactivation-demand-attention.patch 1235 BLAKE2B 49b7bca6c6009ffd1c9d94de6caab874f45a54f846f813c659bb63a3775aea2f5280f0f2728fcdd4e8d90a28c49b46dedbb5289e3d41c110a7ccbb480f465076 SHA512 35ecb28484b0f07b026d8875b4c5cabfb05f563259920c76d6bb1c0cd2339891540c6aab8f763e034d52c90e45bafb5c607fd18e602791d75f9e92fef9162a00
-DIST kwin-5.24.4.tar.xz 6448844 BLAKE2B 3e58ae22d2ff254f4c08a8c6662702e5dae97dd207ca8d1d51cc203826d4b68a5eecffea69cd6eb4de5894e09e73340cda540e41db3753873cab72a76936e6d4 SHA512 2e1389a68e373791bd397294c834fb1cdbab24f32253eeaf505bb1878b8a8a5cd02d1250cae181c00dc73d6a524ff44cd1fbf2e101f13adf915f30f15c738df3
+AUX kwin-5.24.5-effects-overview-hide-panels.patch 2059 BLAKE2B 1f5477757d7c56e2c862d35c0052c53ac6295ba17b0a16a20bf15f80df09756011429d3ffb589dc8a367e468b55672e2de42e79d5b6c4445d7835d271ddbd483 SHA512 d5410cde9f264bb3a2fc5cc5583c9655afa51af42eec056ff04adcd9a2102be9972052f9ce5a93709adfe8cfec9079f28c9e51cf1bd9c1fc322738e8fc0c634d
+AUX kwin-5.24.5-fix-multi-gpu-double-copy.patch 1762 BLAKE2B 45e37e6f6b7a134284d5c4c63ba63f2657be6921e37ff7b49d52c09f87174ff7dd0e0860dbc487d217ea236f4622a15e350684919b7efb9728cb0b9a7ddf0622 SHA512 b3954c5c6a64c7c3e3a5ee78d80b6c7b0a053ab91686363035e4e730d29449c98d2beb4fc23aeac2e678e09de0a3771ed72da7eeec2f2f7bfe9354fc1a8157ce
+AUX kwin-5.24.5-fix-nvidia-render-glitches.patch 1674 BLAKE2B ef1db8231b6931857c53d24b21a6dc0fb54257d62c171a1717c65569fc93f788479b3389fdb3d455b0e3e22baae899e6f8c80a44a4d4969cf05e831c286aa176 SHA512 f4905d81d03596b9d8a56d5ed580c6f1291f160ab39b20fbf06c70a2ac4d2de08a137e5cb13bf2fd4532adbbe89fd906a18dc0c51ba52f51a8b5c68186b08f29
+AUX kwin-5.24.5-fix-plasmashell-crash-1.patch 11170 BLAKE2B 0e7877953d8a9c35c4d618f7ac95fae1222516edae8fb6ba644d28c495621189bbc145cd8410f3e70852ce342f72592b6b2c633d6fc38196472921c14376d967 SHA512 71f9d67fa2d2200b7b0f9a4d130fd9518032b5bd79076a3d47a1a1e77a3bbca49113880ce7ef6f281d86a04ba568f9e26f7d30f7402343308a7f6748f9efa7ae
+AUX kwin-5.24.5-fix-plasmashell-crash-2.patch 982 BLAKE2B dbb3bc31d65384ec14164f7af58254482e0c0bcbb31b06386ea1981bb886a220cf0b727aa7b2b963eaa3c44454344801b0c7fcdce7929c2ffddc6bee6e30cdca SHA512 604ccaab296defceb37ed0bffb5ba6e2c40563bbcf8b4fb2d899c0669de5d180a59ca73fb16f8a2e7939f00ba54c2f4daa96d33b99a4543b88957926d574a3fd
+AUX kwin-5.24.5-tabbox-dont-dismiss-popups.patch 1111 BLAKE2B 017199e01456961ece0335f54d42e18162c703868e7a7f95e84ea1440014ceaaed798e7668dbba4e7392492d82171e29d5453a554f669a789eb8b52a15f47c88 SHA512 538b79201b70eaf162ec75a37dcc40c264b5f1021c6a940ab67274c9e33566962053867f11b45f309d1dfe35d30573139419f666333e06bfd4a5d1c08ca97e6a
+AUX kwin-5.24.5-update-device-outputName.patch 959 BLAKE2B c39d0a94210ea82fa4c7292cb29d5fd93aa793d74e3743f23b3a86462a898594e17798a7beb272cd8462e557875560a05ae642463cee78d7d2a35ee0cd11e576 SHA512 fc4ec093ea882b9d73ef11024d4279d566faeee1979a7fb0f8f29c5e89c658f32b89a3f40faee286c428ac95297dde684ceefcc5e0d3276cdd8d512084f02a19
DIST kwin-5.24.5.tar.xz 6453932 BLAKE2B cd042dd8c9168e11bc39d15969c57a97fd5c47b1af3e3a6235cabad166c4925c51541d52f7bf96f3132b3ecfeb91547845d6af3893ab5f31b41df4a926e83993 SHA512 4fad8b39a588a44f89e2640358d8e563047fa889a9bdaf246c1c87d320aa5f5b9d3d6bef702314fb06d2bfe16d0445efe736de60d94b4409f9b5efcdac48d089
-EBUILD kwin-5.24.4-r1.ebuild 4603 BLAKE2B 25641eac46f94b51f9f7e5219cdcc0318f4c2af271ff1c6931cca5d6a420ad6bea85008ecff4004710e7ba4adcfe32f15456f68ee7d45aaa25089f92da8c2676 SHA512 e2581f0c225ea409a480148c4e083b7c6ca849de78a98cab104844f0fe7b73562e4d53a69b349094bc53303c7207d2115693670a6bc12c4a8d94fbdfff055749
-EBUILD kwin-5.24.5.ebuild 3999 BLAKE2B e8ce73997e57a5950ea0845dfd9483bdeccb4f3fe579527fc71fcf1f20ffadd9c0b7e3a3c096de5d7a14a7558a28d798a7a154da046525b70bbc3ec1864e7ff9 SHA512 59ca2792f3da48edf46acf1183fae9f69bd9ec344631e264cd8f761cd74257a195eaa29abc48e43b8e41b6272c9f01404fc88a87aa3b61acd11f52ca89ff5879
-MISC metadata.xml 512 BLAKE2B 3e81119dbc98181573e294885c52623e4799b55c238ca9513e33547e718ec0f1762371d6391a4291c54159f31cd510cd8d9c192aa16ef0fc16672a3d0ef25dbe SHA512 a9a28562cb0f25abf24cb89c48fea816bfaf701c889ee08e66b80b3afe434af68e5ddb0fa21d313d68418c81a1e73eefcabf75e8e3878f55a1292039dde6ecdb
+DIST kwin-5.25.2.tar.xz 6622476 BLAKE2B ee659cce95cc2fea3d9b0a2ce8669c107cac60c1844f3c569e002782ea19bd980a999076ad84231215712a8e25a6fa91cf4b979c88b30d09e9c5437a67c39430 SHA512 1a93bcd5d0a6f70aa67e1bb940fa505ffa2c946280e772a1fd061dd3acfaa84a851302cd6c96d30abd10d01dbdc731d884f3a79e590b0c7ff26a44b019cc7ec9
+EBUILD kwin-5.24.5-r2.ebuild 4421 BLAKE2B f9a50bba822c9da8867b4a5cb3fab9c9bab2ab75d93f20f3cfd467672c425fcb6cc9da401f49c444726f7bb3fed7de636c3bc696fffa949c02c133125a4f4311 SHA512 32eec4d57c7525e27ef2c1cd5b0aed37a6eafaf459146ed6170763773f31805a89b9b7d7d8cc9e22230236c9936a21624cf089a0b0f9923c148a73f16cc8359f
+EBUILD kwin-5.25.2.ebuild 4174 BLAKE2B e898e6b3238aff6de16730b770c318f56c88350d2a43a02d197f36f20130762d75ce5542c2527376b437c7f169cc77c915ab05b0a8d372d5507c738dff1a7555 SHA512 44c02ac15741db2710bb0c70ebeae028c92dbaddf0e0d3dee4f6b3d46ec476db21368a19443d08f73f7423a9baf69e9af87756c249cc9b5e5f497b0e5a6ade83
+MISC metadata.xml 601 BLAKE2B 7c0bd77ee6f0b2622a67856a1da9257577cb55f5675e065f0e00dbb22d77d639ba7efdb9af06c6676152f168f26f854dc9dfe1107897ed87f8eafa73e2bdf169 SHA512 ee62735bef06e510b0f4961465bc86aff1cece881b7370cbe3b10bcf0457a4ac2fae8ff41953787ad47fef1917dbf1c2d568eec1cdff3bc0f09f60955cfca4d2
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-backends-drm-dont-perm-disable-vrr.patch b/kde-plasma/kwin/files/kwin-5.24.4-backends-drm-dont-perm-disable-vrr.patch
deleted file mode 100644
index 38d4771c2345..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-backends-drm-dont-perm-disable-vrr.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From a5404234dbd26e170acb97789599fbcd705cf6cb Mon Sep 17 00:00:00 2001
-From: Xaver Hugl <xaver.hugl@gmail.com>
-Date: Fri, 8 Apr 2022 17:47:09 +0200
-Subject: [PATCH] backends/drm: don't permanently disable VRR when the test
- commit fails
-
-In 5.24, the same code path is used for testing direct scanout, so that
-causes false negatives. Generally though, the user setting shouldn't be
-touched, it's not really proper feedback for the driver or KWin having
-problems.
-
-
-(cherry picked from commit 2ef6215a517e4220f147f5327e7ecdad02762b64)
----
- src/backends/drm/drm_output.cpp | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/backends/drm/drm_output.cpp b/src/backends/drm/drm_output.cpp
-index bd08631cf7..048803883b 100644
---- a/src/backends/drm/drm_output.cpp
-+++ b/src/backends/drm/drm_output.cpp
-@@ -337,7 +337,6 @@ bool DrmOutput::present(const QSharedPointer<DrmBuffer> &buffer, QRegion damaged
- m_pipeline->applyPendingChanges();
- } else {
- m_pipeline->revertPendingChanges();
-- setVrrPolicy(RenderLoop::VrrPolicy::Never);
- }
- }
- if (m_pipeline->present(buffer)) {
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-backends-drm-fetch-immutable-blobs.patch b/kde-plasma/kwin/files/kwin-5.24.4-backends-drm-fetch-immutable-blobs.patch
deleted file mode 100644
index 16c7756d33e2..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-backends-drm-fetch-immutable-blobs.patch
+++ /dev/null
@@ -1,214 +0,0 @@
-From 82c2324b5675ea2d5e3b962f270bda1d186e7326 Mon Sep 17 00:00:00 2001
-From: Xaver Hugl <xaver.hugl@gmail.com>
-Date: Mon, 4 Apr 2022 20:19:05 +0200
-Subject: [PATCH] backends/drm: fetch immutable blobs in DrmProperty
-
-If the blob is fetched while there is no kernel-visible reference to it,
-the driver may re-use the blob ID. When DrmProperty is created or updated,
-KWin holds a reference on the blob via drmModeObjectProperties, so this
-should prevent any possible issues.
-
-CCBUG: 449285
----
- src/backends/drm/drm_object_connector.cpp | 13 +++-----
- src/backends/drm/drm_object_plane.cpp | 39 +++++++++++------------
- src/backends/drm/drm_property.cpp | 27 +++++++++++++++-
- src/backends/drm/drm_property.h | 7 +++-
- 4 files changed, 54 insertions(+), 32 deletions(-)
-
-diff --git a/src/backends/drm/drm_object_connector.cpp b/src/backends/drm/drm_object_connector.cpp
-index a0045290df..0cdbd70b4f 100644
---- a/src/backends/drm/drm_object_connector.cpp
-+++ b/src/backends/drm/drm_object_connector.cpp
-@@ -337,16 +337,11 @@ bool DrmConnector::updateProperties()
- }
-
- // parse edid
-- auto edidProp = getProp(PropertyIndex::Edid);
-- if (edidProp) {
-- DrmScopedPointer<drmModePropertyBlobRes> blob(drmModeGetPropertyBlob(gpu()->fd(), edidProp->current()));
-- if (blob && blob->data) {
-- m_edid = Edid(blob->data, blob->length);
-- if (!m_edid.isValid()) {
-- qCWarning(KWIN_DRM) << "Couldn't parse EDID for connector" << this;
-- }
-+ if (const auto edidProp = getProp(PropertyIndex::Edid); edidProp && edidProp->immutableBlob()) {
-+ m_edid = Edid(edidProp->immutableBlob()->data, edidProp->immutableBlob()->length);
-+ if (!m_edid.isValid()) {
-+ qCWarning(KWIN_DRM) << "Couldn't parse EDID for connector" << this;
- }
-- deleteProp(PropertyIndex::Edid);
- } else {
- qCDebug(KWIN_DRM) << "Could not find edid for connector" << this;
- }
-diff --git a/src/backends/drm/drm_object_plane.cpp b/src/backends/drm/drm_object_plane.cpp
-index 6967fdd50d..c4dcca96d4 100644
---- a/src/backends/drm/drm_object_plane.cpp
-+++ b/src/backends/drm/drm_object_plane.cpp
-@@ -73,29 +73,26 @@ bool DrmPlane::init()
- checkSupport(5, Transformation::ReflectY);
-
- // read formats from blob if available and if modifiers are supported, and from the plane object if not
-- if (auto formatProp = getProp(PropertyIndex::In_Formats); formatProp && gpu()->addFB2ModifiersSupported()) {
-- DrmScopedPointer<drmModePropertyBlobRes> propertyBlob(drmModeGetPropertyBlob(gpu()->fd(), formatProp->current()));
-- if (propertyBlob && propertyBlob->data) {
-- auto blob = static_cast<drm_format_modifier_blob*>(propertyBlob->data);
-- auto modifiers = reinterpret_cast<drm_format_modifier*>(reinterpret_cast<uint8_t*>(blob) + blob->modifiers_offset);
-- uint32_t *formatarr = reinterpret_cast<uint32_t*>(reinterpret_cast<uint8_t*>(blob) + blob->formats_offset);
--
-- for (uint32_t f = 0; f < blob->count_formats; f++) {
-- auto format = formatarr[f];
-- QVector<uint64_t> mods;
-- for (uint32_t m = 0; m < blob->count_modifiers; m++) {
-- auto modifier = &modifiers[m];
-- // The modifier advertisement blob is partitioned into groups of 64 formats
-- if (m < modifier->offset || m > modifier->offset + 63) {
-- continue;
-- }
-- if (!(modifier->formats & (1 << (f - modifier->offset)))) {
-- continue;
-- }
-- mods << modifier->modifier;
-+ if (const auto formatProp = getProp(PropertyIndex::In_Formats); formatProp && formatProp->immutableBlob() && gpu()->addFB2ModifiersSupported()) {
-+ auto blob = static_cast<drm_format_modifier_blob *>(formatProp->immutableBlob()->data);
-+ auto modifiers = reinterpret_cast<drm_format_modifier *>(reinterpret_cast<uint8_t *>(blob) + blob->modifiers_offset);
-+ uint32_t *formatarr = reinterpret_cast<uint32_t *>(reinterpret_cast<uint8_t *>(blob) + blob->formats_offset);
-+
-+ for (uint32_t f = 0; f < blob->count_formats; f++) {
-+ auto format = formatarr[f];
-+ QVector<uint64_t> mods;
-+ for (uint32_t m = 0; m < blob->count_modifiers; m++) {
-+ auto modifier = &modifiers[m];
-+ // The modifier advertisement blob is partitioned into groups of 64 formats
-+ if (m < modifier->offset || m > modifier->offset + 63) {
-+ continue;
- }
-- m_supportedFormats.insert(format, mods);
-+ if (!(modifier->formats & (1 << (f - modifier->offset)))) {
-+ continue;
-+ }
-+ mods << modifier->modifier;
- }
-+ m_supportedFormats.insert(format, mods);
- }
- } else {
- for (uint32_t i = 0; i < p->count_formats; i++) {
-diff --git a/src/backends/drm/drm_property.cpp b/src/backends/drm/drm_property.cpp
-index 28af8ec07f..8ab0dc0e5a 100644
---- a/src/backends/drm/drm_property.cpp
-+++ b/src/backends/drm/drm_property.cpp
-@@ -24,6 +24,7 @@ DrmProperty::DrmProperty(DrmObject *obj, drmModePropertyRes *prop, uint64_t val,
- , m_next(val)
- , m_current(val)
- , m_immutable(prop->flags & DRM_MODE_PROP_IMMUTABLE)
-+ , m_isBlob(prop->flags & DRM_MODE_PROP_BLOB)
- , m_obj(obj)
- {
- if (!enumNames.isEmpty()) {
-@@ -35,6 +36,7 @@ DrmProperty::DrmProperty(DrmObject *obj, drmModePropertyRes *prop, uint64_t val,
- m_minValue = prop->values[0];
- m_maxValue = prop->values[1];
- }
-+ updateBlob();
- }
-
- DrmProperty::~DrmProperty() = default;
-@@ -110,7 +112,10 @@ bool DrmProperty::needsCommit() const
-
- void DrmProperty::setCurrent(uint64_t value)
- {
-- m_current = value;
-+ if (m_current != value) {
-+ updateBlob();
-+ m_current = value;
-+ }
- }
-
- uint64_t DrmProperty::current() const
-@@ -122,10 +127,12 @@ QVector<QByteArray> DrmProperty::enumNames() const
- {
- return m_enumNames;
- }
-+
- bool DrmProperty::hasEnum(uint64_t value) const
- {
- return m_enumMap.contains(value);
- }
-+
- bool DrmProperty::hasAllEnums() const
- {
- return m_enumMap.count() == m_enumNames.count();
-@@ -166,4 +173,22 @@ uint64_t DrmProperty::maxValue() const
- return m_maxValue;
- }
-
-+void DrmProperty::updateBlob()
-+{
-+ if (m_immutable && m_isBlob) {
-+ if (m_current != 0) {
-+ m_immutableBlob.reset(drmModeGetPropertyBlob(m_obj->gpu()->fd(), m_current));
-+ if (m_immutableBlob && (!m_immutableBlob->data || !m_immutableBlob->length)) {
-+ m_immutableBlob.reset();
-+ }
-+ } else {
-+ m_immutableBlob.reset();
-+ }
-+ }
-+}
-+
-+drmModePropertyBlobRes *DrmProperty::immutableBlob() const
-+{
-+ return m_immutableBlob.get();
-+}
- }
-diff --git a/src/backends/drm/drm_property.h b/src/backends/drm/drm_property.h
-index 48bdeafdc2..1ae547f41e 100644
---- a/src/backends/drm/drm_property.h
-+++ b/src/backends/drm/drm_property.h
-@@ -9,9 +9,9 @@
- */
-
- #pragma once
-+#include "drm_pointer.h"
-
- #include <xf86drmMode.h>
--
- #include <QVector>
- #include <QMap>
- #include <QByteArray>
-@@ -59,6 +59,7 @@ public:
-
- void setCurrent(uint64_t value);
- uint64_t current() const;
-+ drmModePropertyBlobRes *immutableBlob() const;
-
- uint64_t minValue() const;
- uint64_t maxValue() const;
-@@ -78,6 +79,8 @@ public:
- }
-
- private:
-+ void updateBlob();
-+
- uint32_t m_propId = 0;
- QByteArray m_propName;
-
-@@ -89,6 +92,7 @@ private:
- uint64_t m_next = 0;
- // the value currently set for or by the kernel
- uint64_t m_current = 0;
-+ DrmScopedPointer<drmModePropertyBlobRes> m_immutableBlob;
-
- uint64_t m_minValue = -1;
- uint64_t m_maxValue = -1;
-@@ -96,6 +100,7 @@ private:
- QMap<uint32_t, uint64_t> m_enumMap;
- QVector<QByteArray> m_enumNames;
- const bool m_immutable;
-+ const bool m_isBlob;
- bool m_legacy = false;
- const DrmObject *m_obj;
- };
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-dont-send-geom-to-text-input.patch b/kde-plasma/kwin/files/kwin-5.24.4-dont-send-geom-to-text-input.patch
deleted file mode 100644
index acd7bf4149ab..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-dont-send-geom-to-text-input.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From a35e3075a7aa4616c8930ccd3869dc4cca5d287e Mon Sep 17 00:00:00 2001
-From: Weng Xuetian <wengxt@gmail.com>
-Date: Sat, 9 Apr 2022 07:25:44 -0700
-Subject: [PATCH] Do not send overlay geometry to text input.
-
-(cherry picked from commit 374e94918238f3ddb9d00c542f281d3d8a309efb)
----
- src/inputmethod.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/inputmethod.cpp b/src/inputmethod.cpp
-index e7951d9580..5b8e54efbc 100644
---- a/src/inputmethod.cpp
-+++ b/src/inputmethod.cpp
-@@ -615,7 +615,7 @@ void InputMethod::updateInputPanelState()
- const bool bottomKeyboard = m_inputClient && m_inputClient->mode() != InputPanelV1Client::Overlay && m_inputClient->isShown();
- m_trackedClient->setVirtualKeyboardGeometry(bottomKeyboard ? m_inputClient->inputGeometry() : QRect());
-
-- if (m_inputClient) {
-+ if (m_inputClient && m_inputClient->mode() != InputPanelV1Client::Overlay) {
- overlap = m_trackedClient->frameGeometry() & m_inputClient->inputGeometry();
- overlap.moveTo(m_trackedClient->mapToLocal(overlap.topLeft()));
- }
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-dont-use-xcb-in-wayland.patch b/kde-plasma/kwin/files/kwin-5.24.4-dont-use-xcb-in-wayland.patch
deleted file mode 100644
index 667b91b8dc5c..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-dont-use-xcb-in-wayland.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 7a26f93cb579cf6b1cbc1e32790f93be70013157 Mon Sep 17 00:00:00 2001
-From: Xaver Hugl <xaver.hugl@gmail.com>
-Date: Tue, 12 Apr 2022 15:45:52 +0200
-Subject: [PATCH] effects/kscreen: don't use xcb on Wayland
-
-BUG: 450564
-FIXED-IN: 5.24.5
-(cherry picked from commit db3f27336f2172fd70be3411874d9bbeb3db6a24)
----
- src/effects/kscreen/kscreen.cpp | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/effects/kscreen/kscreen.cpp b/src/effects/kscreen/kscreen.cpp
-index 9484399756..0673915aad 100644
---- a/src/effects/kscreen/kscreen.cpp
-+++ b/src/effects/kscreen/kscreen.cpp
-@@ -44,15 +44,15 @@ namespace KWin
-
- KscreenEffect::KscreenEffect()
- : Effect()
-- , m_atom(effects->announceSupportProperty("_KDE_KWIN_KSCREEN_SUPPORT", this))
-+ , m_atom(effects->waylandDisplay() ? XCB_ATOM_NONE : effects->announceSupportProperty("_KDE_KWIN_KSCREEN_SUPPORT", this))
- {
- initConfig<KscreenConfig>();
-- connect(effects, &EffectsHandler::propertyNotify, this, &KscreenEffect::propertyNotify);
-- connect(effects, &EffectsHandler::xcbConnectionChanged, this,
-- [this] {
-+ if (!effects->waylandDisplay()) {
-+ connect(effects, &EffectsHandler::propertyNotify, this, &KscreenEffect::propertyNotify);
-+ connect(effects, &EffectsHandler::xcbConnectionChanged, this, [this]() {
- m_atom = effects->announceSupportProperty(QByteArrayLiteral("_KDE_KWIN_KSCREEN_SUPPORT"), this);
-- }
-- );
-+ });
-+ }
- reconfigure(ReconfigureAll);
-
- const QList<EffectScreen *> screens = effects->screens();
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-fix-current-VD-always-added.patch b/kde-plasma/kwin/files/kwin-5.24.4-fix-current-VD-always-added.patch
deleted file mode 100644
index 195d33b1f3a2..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-fix-current-VD-always-added.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From c1d7919ad7cc8a7e55f5b93ec84de63547bc53b9 Mon Sep 17 00:00:00 2001
-From: Ismael Asensio <isma.af@gmail.com>
-Date: Fri, 8 Apr 2022 22:53:08 +0200
-Subject: [PATCH] AbstractClient: Fix the current VD being always added to the
- plasma interface
-
-When setting-up the plasma window interface we need to call
-`setOnAllDesktops()` after the actual virtual desktops have
-been set.
-
-Otherwise, the current desktop would be always added to the
-interface (as if the user were unsetting the "onAllDesktops"
-flag) and the plasma interface and KWin can get un-synced,
-specially if there are specific window rules.
-
-BUG: 452171
-FIXED-IN: 5.24.5
-
-
-(cherry picked from commit 4c8711f121430caa658f9848070e4e25c4a12208)
----
- src/abstract_client.cpp | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/abstract_client.cpp b/src/abstract_client.cpp
-index 7e8a7eec04..0714b9ac3f 100644
---- a/src/abstract_client.cpp
-+++ b/src/abstract_client.cpp
-@@ -1488,7 +1488,6 @@ void AbstractClient::setupWindowManagementInterface()
- w->setKeepBelow(keepBelow());
- w->setMaximized(maximizeMode() == KWin::MaximizeFull);
- w->setMinimized(isMinimized());
-- w->setOnAllDesktops(isOnAllDesktops());
- w->setDemandsAttention(isDemandingAttention());
- w->setCloseable(isCloseable());
- w->setMaximizeable(isMaximizable());
-@@ -1620,6 +1619,10 @@ void AbstractClient::setupWindowManagementInterface()
- for (const auto vd : qAsConst(m_desktops)) {
- w->addPlasmaVirtualDesktop(vd->id());
- }
-+ // We need to set `OnAllDesktops` after the actual VD list has been added.
-+ // Otherwise it will unconditionally add the current desktop to the interface
-+ // which may not be the case, for example, when using rules
-+ w->setOnAllDesktops(isOnAllDesktops());
-
- //Plasma Virtual desktop management
- //show/hide when the window enters/exits from desktop
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-fix-unlocking-wayland-sessions.patch b/kde-plasma/kwin/files/kwin-5.24.4-fix-unlocking-wayland-sessions.patch
deleted file mode 100644
index 9e9a4dabc998..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-fix-unlocking-wayland-sessions.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From ee625b2d8acad2ba81693107740a12d8a03863c0 Mon Sep 17 00:00:00 2001
-From: Aleix Pol <aleixpol@kde.org>
-Date: Mon, 28 Mar 2022 03:40:12 +0200
-Subject: [PATCH] Fix unlocking wayland sessions
-
-We were never issuing a repaint which confused thoroughly the
-compositor.
-
-BUG: 447705
----
- src/wayland_server.cpp | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/wayland_server.cpp b/src/wayland_server.cpp
-index eb3600f824..9e60787465 100644
---- a/src/wayland_server.cpp
-+++ b/src/wayland_server.cpp
-@@ -15,6 +15,7 @@
- #include "inputpanelv1integration.h"
- #include "keyboard_input.h"
- #include "screens.h"
-+#include "scene.h"
- #include "layershellv1integration.h"
- #include "main.h"
- #include "xdgshellintegration.h"
-@@ -610,6 +611,7 @@ void WaylandServer::initScreenLocker()
- connect(seat, &KWaylandServer::SeatInterface::timestampChanged,
- screenLockerApp, &ScreenLocker::KSldApp::userActivity);
- }
-+ Compositor::self()->scene()->addRepaintFull();
- }
- );
-
-@@ -627,6 +629,7 @@ void WaylandServer::initScreenLocker()
- screenLockerApp, &ScreenLocker::KSldApp::userActivity);
- }
- ScreenLocker::KSldApp::self()->setWaylandFd(-1);
-+ Compositor::self()->scene()->addRepaintFull();
- }
- );
-
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-waylandserver-lockScreenShown.patch b/kde-plasma/kwin/files/kwin-5.24.4-waylandserver-lockScreenShown.patch
deleted file mode 100644
index 4defd5ae5945..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-waylandserver-lockScreenShown.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 9d38f57d84fb9a6f2c4e60f7051f685842f34e0f Mon Sep 17 00:00:00 2001
-From: Xaver Hugl <xaver.hugl@gmail.com>
-Date: Mon, 28 Mar 2022 18:08:59 +0200
-Subject: [PATCH] waylandserver: only signal lockScreenShown once it has
- actually been shown
-
-When the system goes to suspend and screen locking for suspend is enabled,
-suspend is inhibited until ScreenLocker::KSldApp::self()->lockScreenShown()
-gets called, in order to make sure that the lockscreen is shown before the
-system goes to standby, and thus also when the system wakes (instead of
-potentially sensitive user information).
-However, signalling that when the lockscreen gets mapped can't work reliably,
-as it's then a matter of timing whether or not KWin actually presents an
-image with the lockscreen before suspending. To fix that, this commit replaces
-that logic with only calling lockScreenShown once every output actually got a
-lockscreen presented.
----
- src/wayland_server.cpp | 25 +++++++++++++++++++++----
- src/wayland_server.h | 10 ++++++++++
- 2 files changed, 31 insertions(+), 4 deletions(-)
-
-diff --git a/src/wayland_server.cpp b/src/wayland_server.cpp
-index c850a1b697..6d5e1206a5 100644
---- a/src/wayland_server.cpp
-+++ b/src/wayland_server.cpp
-@@ -213,10 +213,6 @@ KWaylandServer::ClientConnection *WaylandServer::inputMethodConnection() const
-
- void WaylandServer::registerShellClient(AbstractClient *client)
- {
-- if (client->isLockScreen()) {
-- ScreenLocker::KSldApp::self()->lockScreenShown();
-- }
--
- if (client->readyForPainting()) {
- Q_EMIT shellClientAdded(client);
- } else {
-@@ -623,6 +619,8 @@ void WaylandServer::initScreenLocker()
- m_screenLockerClientConnection = nullptr;
- }
-
-+ new LockScreenPresentationWatcher(this);
-+
- const QVector<SeatInterface *> seatIfaces = m_display->seats();
- for (auto *seat : seatIfaces) {
- disconnect(seat, &KWaylandServer::SeatInterface::timestampChanged,
-@@ -797,4 +795,23 @@ QString WaylandServer::socketName() const
- return QString();
- }
-
-+WaylandServer::LockScreenPresentationWatcher::LockScreenPresentationWatcher(WaylandServer *server)
-+{
-+ connect(server, &WaylandServer::shellClientAdded, this, [this](AbstractClient *client) {
-+ if (client->isLockScreen()) {
-+ connect(client->output()->renderLoop(), &RenderLoop::framePresented, this, [this, client]() {
-+ // only signal lockScreenShown once all outputs have been presented at least once
-+ m_signaledOutputs << client->output();
-+ if (m_signaledOutputs.size() == kwinApp()->platform()->enabledOutputs().size()) {
-+ ScreenLocker::KSldApp::self()->lockScreenShown();
-+ delete this;
-+ }
-+ });
-+ }
-+ });
-+ QTimer::singleShot(1000, this, [this]() {
-+ ScreenLocker::KSldApp::self()->lockScreenShown();
-+ delete this;
-+ });
-+}
- }
-diff --git a/src/wayland_server.h b/src/wayland_server.h
-index bf1ba6eee5..58dda9a7a2 100644
---- a/src/wayland_server.h
-+++ b/src/wayland_server.h
-@@ -243,6 +243,16 @@ private:
- void handleOutputRemoved(AbstractOutput *output);
- void handleOutputEnabled(AbstractOutput *output);
- void handleOutputDisabled(AbstractOutput *output);
-+
-+ class LockScreenPresentationWatcher : public QObject
-+ {
-+ public:
-+ LockScreenPresentationWatcher(WaylandServer *server);
-+
-+ private:
-+ QSet<AbstractOutput *> m_signaledOutputs;
-+ };
-+
- KWaylandServer::Display *m_display = nullptr;
- KWaylandServer::CompositorInterface *m_compositor = nullptr;
- KWaylandServer::SeatInterface *m_seat = nullptr;
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-waylandserver-move-LockScreenPresentationWatcher.patch b/kde-plasma/kwin/files/kwin-5.24.4-waylandserver-move-LockScreenPresentationWatcher.patch
deleted file mode 100644
index 0607e2ff3030..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-waylandserver-move-LockScreenPresentationWatcher.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 388402c3b1b37d9f72597aae8d6670e8c0edeb14 Mon Sep 17 00:00:00 2001
-From: Xaver Hugl <xaver.hugl@gmail.com>
-Date: Wed, 6 Apr 2022 21:08:25 +0200
-Subject: [PATCH] waylandserver: move LockScreenPresentationWatcher to the
- correct place
-
-CCBUG: 452334
----
- src/wayland_server.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/wayland_server.cpp b/src/wayland_server.cpp
-index 6d5e1206a5..eb3600f824 100644
---- a/src/wayland_server.cpp
-+++ b/src/wayland_server.cpp
-@@ -603,6 +603,8 @@ void WaylandServer::initScreenLocker()
- }
- ScreenLocker::KSldApp::self()->setWaylandFd(clientFd);
-
-+ new LockScreenPresentationWatcher(this);
-+
- const QVector<SeatInterface *> seatIfaces = m_display->seats();
- for (auto *seat : seatIfaces) {
- connect(seat, &KWaylandServer::SeatInterface::timestampChanged,
-@@ -619,8 +621,6 @@ void WaylandServer::initScreenLocker()
- m_screenLockerClientConnection = nullptr;
- }
-
-- new LockScreenPresentationWatcher(this);
--
- const QVector<SeatInterface *> seatIfaces = m_display->seats();
- for (auto *seat : seatIfaces) {
- disconnect(seat, &KWaylandServer::SeatInterface::timestampChanged,
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.4-xdgactivation-demand-attention.patch b/kde-plasma/kwin/files/kwin-5.24.4-xdgactivation-demand-attention.patch
deleted file mode 100644
index 8efa6b637222..000000000000
--- a/kde-plasma/kwin/files/kwin-5.24.4-xdgactivation-demand-attention.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 5390a4978f3a3903ede15ecd94a750b37931fbd2 Mon Sep 17 00:00:00 2001
-From: Aleix Pol <aleixpol@kde.org>
-Date: Wed, 6 Apr 2022 00:33:21 +0200
-Subject: [PATCH] xdgactivation: Demand attention when a process fails to
- resolve its token
-
-In xdg_activation_v1, if a process fails to negotiate activation, at
-least decorate it as demanding attention.
-This will give apps ways to indicate attention is required. It can can also
-help detect clients doing weird things.
-
-
-(cherry picked from commit 52035f43b90738e2efb4fd7b482719c1ea458578)
----
- src/xdgactivationv1.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/xdgactivationv1.cpp b/src/xdgactivationv1.cpp
-index e2270a3393..97f8575c29 100644
---- a/src/xdgactivationv1.cpp
-+++ b/src/xdgactivationv1.cpp
-@@ -76,6 +76,7 @@ void XdgActivationV1Integration::activateSurface(SurfaceInterface *surface, cons
-
- if (!m_currentActivationToken || m_currentActivationToken->token != token) {
- qCDebug(KWIN_CORE) << "Refusing to activate " << client << " (provided token: " << token << ", current token:" << (m_currentActivationToken ? m_currentActivationToken->token : QStringLiteral("null")) << ")";
-+ client->demandAttention();
- return;
- }
-
---
-GitLab
-
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-effects-overview-hide-panels.patch b/kde-plasma/kwin/files/kwin-5.24.5-effects-overview-hide-panels.patch
new file mode 100644
index 000000000000..d5b1f8c3864e
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-effects-overview-hide-panels.patch
@@ -0,0 +1,65 @@
+From 7fcf36d636f62f101397d88ad6c448f54da79e46 Mon Sep 17 00:00:00 2001
+From: Marco Martin <notmart@gmail.com>
+Date: Fri, 13 May 2022 15:37:13 +0000
+Subject: [PATCH] effects/overview: hide panels
+
+This makes it consistent with WindowView (and the panel window doesn't respond
+to input anyways even if shown, which is misleading).
+
+BUG: 444274
+FIXED-IN: 5.24.6
+
+
+(cherry picked from commit db2af5500f964f3eefde60183b69f21125aeb194)
+---
+ src/effects/overview/qml/ScreenView.qml | 20 ++++++++------------
+ 1 file changed, 8 insertions(+), 12 deletions(-)
+
+diff --git a/src/effects/overview/qml/ScreenView.qml b/src/effects/overview/qml/ScreenView.qml
+index 40cc29f4c7..39119e40b9 100644
+--- a/src/effects/overview/qml/ScreenView.qml
++++ b/src/effects/overview/qml/ScreenView.qml
+@@ -70,16 +70,8 @@ FocusScope {
+ }
+ }
+
+- ExpoArea {
+- id: heapArea
+- screen: targetScreen
+- }
+-
+ Column {
+- x: heapArea.x
+- y: heapArea.y
+- width: heapArea.width
+- height: heapArea.height
++ anchors.fill: parent
+
+ Item {
+ id: topBar
+@@ -176,15 +168,19 @@ FocusScope {
+
+ KWinComponents.WindowThumbnailItem {
+ id: windowThumbnail
+- visible: !model.client.hidden
++ visible: !model.client.hidden && opacity > 0
+ wId: model.client.internalId
+ x: model.client.x - targetScreen.geometry.x
+ y: model.client.y - targetScreen.geometry.y
+ width: model.client.width
+ height: model.client.height
++ opacity: container.effect.gestureInProgress
++ ? 1 - container.effect.partialActivationFactor
++ : (model.client.hidden || container.organized) ? 0 : 1
+
+- TapHandler {
+- onTapped: effect.deactivate();
++ Behavior on opacity {
++ enabled: !container.effect.gestureInProgress
++ NumberAnimation { duration: animationDuration; easing.type: Easing.OutCubic }
+ }
+ }
+ }
+--
+GitLab
+
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-fix-multi-gpu-double-copy.patch b/kde-plasma/kwin/files/kwin-5.24.5-fix-multi-gpu-double-copy.patch
new file mode 100644
index 000000000000..53c05da522ec
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-fix-multi-gpu-double-copy.patch
@@ -0,0 +1,59 @@
+From 3b58fe4bde0722b352e4114adb992a2ed2c96423 Mon Sep 17 00:00:00 2001
+From: Xaver Hugl <xaver.hugl@gmail.com>
+Date: Sat, 7 May 2022 21:23:17 +0200
+Subject: [PATCH] backends/drm: consider escaped separators KWIN_DRM_DEVICES
+
+':' conflicts with the file names in /dev/dri/by-path, so allow it to be
+escaped with '\'
+
+CCBUG: 453386
+
+
+(cherry picked from commit a110aabbccf56019bdc324b3c751112f35ec3f6c)
+---
+ src/backends/drm/drm_backend.cpp | 24 +++++++++++++++++++++++-
+ 1 file changed, 23 insertions(+), 1 deletion(-)
+
+diff --git a/src/backends/drm/drm_backend.cpp b/src/backends/drm/drm_backend.cpp
+index 272dba702c..567ea3f696 100644
+--- a/src/backends/drm/drm_backend.cpp
++++ b/src/backends/drm/drm_backend.cpp
+@@ -57,12 +57,34 @@
+ namespace KWin
+ {
+
++static QStringList splitPathList(const QString &input, const QChar delimiter)
++{
++ QStringList ret;
++ QString tmp;
++ for (int i = 0; i < input.size(); i++) {
++ if (input[i] == delimiter) {
++ if (i > 0 && input[i - 1] == '\\') {
++ tmp[tmp.size() - 1] = delimiter;
++ } else if (!tmp.isEmpty()) {
++ ret.append(tmp);
++ tmp = QString();
++ }
++ } else {
++ tmp.append(input[i]);
++ }
++ }
++ if (!tmp.isEmpty()) {
++ ret.append(tmp);
++ }
++ return ret;
++}
++
+ DrmBackend::DrmBackend(QObject *parent)
+ : Platform(parent)
+ , m_udev(new Udev)
+ , m_udevMonitor(m_udev->monitor())
+ , m_session(Session::create(this))
+- , m_explicitGpus(qEnvironmentVariable("KWIN_DRM_DEVICES").split(':', Qt::SkipEmptyParts))
++ , m_explicitGpus(splitPathList(qEnvironmentVariable("KWIN_DRM_DEVICES"), ':'))
+ , m_dpmsFilter()
+ {
+ setSupportsPointerWarping(true);
+--
+GitLab
+
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-fix-nvidia-render-glitches.patch b/kde-plasma/kwin/files/kwin-5.24.5-fix-nvidia-render-glitches.patch
new file mode 100644
index 000000000000..d38e11375bbe
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-fix-nvidia-render-glitches.patch
@@ -0,0 +1,42 @@
+From e2d271b6365188a86755af82745ad37535ceb4d7 Mon Sep 17 00:00:00 2001
+From: Erik Kurzinger <ekurzinger@nvidia.com>
+Date: Sun, 8 May 2022 12:16:20 -0700
+Subject: [PATCH] platforms/drm: set read buffer in
+ GbmSurface::makeContextCurrent
+
+The first time the GBM backend's EGL context is made current after
+creation, both the read and draw surfaces are set to EGL_NO_SURFACE.
+This will set the GL read and draw buffers to GL_NONE in accordance with
+the EGL spec.
+
+When a real surface is later made current, however, the spec is arguably
+unclear on whether the read and draw buffers should remain set to
+GL_NONE or whether they should be restored to the default GL_BACK. The
+Mesa driver does the latter, the NVIDIA driver does the former.
+
+To work around this difference, Kwin has an explicit call to
+glDrawBuffer in GbmSurface::makeContextCurrent. It does not have a
+corresponding call to glReadBuffer, though, which can cause some desktop
+effects such as background contrast to render incorrectly with the
+NVIDIA driver. This change adds that missing call.
+
+(cherry picked from commit e6d2bc153f499d1ec3510c02badca38d4c42c340)
+---
+ src/backends/drm/egl_gbm_backend.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/backends/drm/egl_gbm_backend.cpp b/src/backends/drm/egl_gbm_backend.cpp
+index 5a0be7ccaf..b34fa1320b 100644
+--- a/src/backends/drm/egl_gbm_backend.cpp
++++ b/src/backends/drm/egl_gbm_backend.cpp
+@@ -377,6 +377,7 @@ bool EglGbmBackend::makeContextCurrent(const Output::RenderData &render) const
+ }
+ if (!GLPlatform::instance()->isGLES()) {
+ glDrawBuffer(GL_BACK);
++ glReadBuffer(GL_BACK);
+ }
+ return true;
+ }
+--
+GitLab
+
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch
new file mode 100644
index 000000000000..46b6f0ad9c71
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch
@@ -0,0 +1,307 @@
+From 4c3195270d6c8e1da8c3e2e3abe5aae75d5bf3c2 Mon Sep 17 00:00:00 2001
+From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
+Date: Fri, 26 Nov 2021 12:03:14 +0200
+Subject: [PATCH] Ensure that Toplevel::output() stays always in sync with
+ geometry
+
+Currently, if geometry updates are blocked, the Toplevel.output property
+won't be updated. On the other hand, it's reasonable to use the output
+property instead of manually looking up the output in window management
+code, e.g. Workspace::clientArea().
+
+In other words, using the Toplevel.output property is like walking on a
+mine field, things can blow up. You can't use Toplevel.output even if it
+makes perfect sense.
+
+This change ensures that Toplevel.output property is always kept in sync
+with the frame geometry. Unfortunately, this means that the output
+property no longer can be updated when the frameGeometryChanged() signal
+is emitted. It has to be done in moveResizeInternal() method.
+
+BUG: 448064
+
+(cherry picked from 510a41eeb89f51843405fa0258c852ab06d05bb8)
+
+Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/2448>
+---
+ src/abstract_client.cpp | 3 ---
+ src/events.cpp | 1 +
+ src/internal_client.cpp | 6 ++++++
+ src/toplevel.cpp | 17 -----------------
+ src/toplevel.h | 10 ++--------
+ src/unmanaged.cpp | 6 ++++++
+ src/unmanaged.h | 1 +
+ src/waylandclient.cpp | 6 ++++++
+ src/x11client.cpp | 7 +++++++
+ src/x11client.h | 1 +
+ 10 files changed, 30 insertions(+), 28 deletions(-)
+
+diff --git a/src/abstract_client.cpp b/src/abstract_client.cpp
+index 0714b9ac3f..ddff11e53c 100644
+--- a/src/abstract_client.cpp
++++ b/src/abstract_client.cpp
+@@ -63,8 +63,6 @@ AbstractClient::AbstractClient()
+ {
+ connect(this, &AbstractClient::clientStartUserMovedResized, this, &AbstractClient::moveResizedChanged);
+ connect(this, &AbstractClient::clientFinishUserMovedResized, this, &AbstractClient::moveResizedChanged);
+- connect(this, &AbstractClient::clientStartUserMovedResized, this, &AbstractClient::removeCheckOutputConnection);
+- connect(this, &AbstractClient::clientFinishUserMovedResized, this, &AbstractClient::setupCheckOutputConnection);
+
+ connect(this, &AbstractClient::windowShown, this, &AbstractClient::hiddenChanged);
+ connect(this, &AbstractClient::windowHidden, this, &AbstractClient::hiddenChanged);
+@@ -1011,7 +1009,6 @@ void AbstractClient::finishInteractiveMoveResize(bool cancel)
+ if (cancel) {
+ moveResize(initialInteractiveMoveResizeGeometry());
+ }
+- checkOutput(); // needs to be done because clientFinishUserMovedResized has not yet re-activated online alignment
+ if (output() != interactiveMoveResizeStartOutput()) {
+ workspace()->sendClientToOutput(this, output()); // checks rule validity
+ if (isFullScreen() || maximizeMode() != MaximizeRestore) {
+diff --git a/src/events.cpp b/src/events.cpp
+index b9bb9bbd36..a22960f0d0 100644
+--- a/src/events.cpp
++++ b/src/events.cpp
+@@ -1261,6 +1261,7 @@ void Unmanaged::configureNotifyEvent(xcb_configure_notify_event_t *e)
+ m_clientGeometry = newgeom;
+ m_frameGeometry = newgeom;
+ m_bufferGeometry = newgeom;
++ checkOutput();
+ Q_EMIT bufferGeometryChanged(this, old);
+ Q_EMIT clientGeometryChanged(this, old);
+ Q_EMIT frameGeometryChanged(this, old);
+diff --git a/src/internal_client.cpp b/src/internal_client.cpp
+index 3be51ff27b..b4c9250fd3 100644
+--- a/src/internal_client.cpp
++++ b/src/internal_client.cpp
+@@ -10,6 +10,7 @@
+ #include "internal_client.h"
+ #include "decorations/decorationbridge.h"
+ #include "deleted.h"
++#include "platform.h"
+ #include "surfaceitem.h"
+ #include "workspace.h"
+
+@@ -477,6 +478,7 @@ void InternalClient::commitGeometry(const QRect &rect)
+ // The client geometry and the buffer geometry are the same.
+ const QRect oldClientGeometry = m_clientGeometry;
+ const QRect oldFrameGeometry = m_frameGeometry;
++ const AbstractOutput *oldOutput = m_output;
+
+ m_clientGeometry = frameRectToClientRect(rect);
+ m_frameGeometry = rect;
+@@ -486,6 +488,7 @@ void InternalClient::commitGeometry(const QRect &rect)
+ return;
+ }
+
++ m_output = kwinApp()->platform()->outputAt(rect.center());
+ syncGeometryToInternalWindow();
+
+ if (oldClientGeometry != m_clientGeometry) {
+@@ -495,6 +498,9 @@ void InternalClient::commitGeometry(const QRect &rect)
+ if (oldFrameGeometry != m_frameGeometry) {
+ Q_EMIT frameGeometryChanged(this, oldFrameGeometry);
+ }
++ if (oldOutput != m_output) {
++ Q_EMIT screenChanged();
++ }
+ Q_EMIT geometryShapeChanged(this, oldFrameGeometry);
+ }
+
+diff --git a/src/toplevel.cpp b/src/toplevel.cpp
+index 698f6998e5..ff216835c4 100644
+--- a/src/toplevel.cpp
++++ b/src/toplevel.cpp
+@@ -47,7 +47,6 @@ Toplevel::Toplevel()
+ , m_skipCloseAnimation(false)
+ {
+ connect(screens(), &Screens::changed, this, &Toplevel::screenChanged);
+- setupCheckOutputConnection();
+ connect(this, &Toplevel::bufferGeometryChanged, this, &Toplevel::inputTransformationChanged);
+
+ // Only for compatibility reasons, drop in the next major release.
+@@ -379,22 +378,6 @@ void Toplevel::deleteEffectWindow()
+ effect_window = nullptr;
+ }
+
+-void Toplevel::checkOutput()
+-{
+- setOutput(kwinApp()->platform()->outputAt(frameGeometry().center()));
+-}
+-
+-void Toplevel::setupCheckOutputConnection()
+-{
+- connect(this, &Toplevel::frameGeometryChanged, this, &Toplevel::checkOutput);
+- checkOutput();
+-}
+-
+-void Toplevel::removeCheckOutputConnection()
+-{
+- disconnect(this, &Toplevel::frameGeometryChanged, this, &Toplevel::checkOutput);
+-}
+-
+ int Toplevel::screen() const
+ {
+ return kwinApp()->platform()->enabledOutputs().indexOf(m_output);
+diff --git a/src/toplevel.h b/src/toplevel.h
+index f6b5dd4e61..3309647eb4 100644
+--- a/src/toplevel.h
++++ b/src/toplevel.h
+@@ -636,13 +636,6 @@ Q_SIGNALS:
+ void visibleGeometryChanged();
+
+ protected Q_SLOTS:
+- /**
+- * Checks whether the screen number for this Toplevel changed and updates if needed.
+- * Any method changing the geometry of the Toplevel should call this method.
+- */
+- void checkOutput();
+- void setupCheckOutputConnection();
+- void removeCheckOutputConnection();
+ void setReadyForPainting();
+
+ protected:
+@@ -673,6 +666,8 @@ protected:
+ void deleteShadow();
+ void deleteEffectWindow();
+ void setDepth(int depth);
++
++ AbstractOutput *m_output = nullptr;
+ QRect m_frameGeometry;
+ QRect m_clientGeometry;
+ QRect m_bufferGeometry;
+@@ -700,7 +695,6 @@ private:
+ QRegion opaque_region;
+ mutable QRegion m_shapeRegion;
+ mutable bool m_shapeRegionIsValid = false;
+- AbstractOutput *m_output = nullptr;
+ bool m_skipCloseAnimation;
+ quint32 m_pendingSurfaceId = 0;
+ QPointer<KWaylandServer::SurfaceInterface> m_surface;
+diff --git a/src/unmanaged.cpp b/src/unmanaged.cpp
+index de3caa303d..3164813a75 100644
+--- a/src/unmanaged.cpp
++++ b/src/unmanaged.cpp
+@@ -12,6 +12,7 @@
+ #include "workspace.h"
+ #include "effects.h"
+ #include "deleted.h"
++#include "platform.h"
+ #include "surfaceitem_x11.h"
+ #include "utils/common.h"
+
+@@ -206,6 +207,11 @@ QWindow *Unmanaged::findInternalWindow() const
+ return nullptr;
+ }
+
++void Unmanaged::checkOutput()
++{
++ setOutput(kwinApp()->platform()->outputAt(frameGeometry().center()));
++}
++
+ void Unmanaged::damageNotifyEvent()
+ {
+ Q_ASSERT(kwinApp()->operationMode() == Application::OperationModeX11);
+diff --git a/src/unmanaged.h b/src/unmanaged.h
+index e874fc1724..fa543eb0b8 100644
+--- a/src/unmanaged.h
++++ b/src/unmanaged.h
+@@ -45,6 +45,7 @@ private:
+ void configureNotifyEvent(xcb_configure_notify_event_t *e);
+ void damageNotifyEvent();
+ QWindow *findInternalWindow() const;
++ void checkOutput();
+ void associate();
+ void initialize();
+ bool m_outline = false;
+diff --git a/src/waylandclient.cpp b/src/waylandclient.cpp
+index 39d6ea22bc..9d8070c7f8 100644
+--- a/src/waylandclient.cpp
++++ b/src/waylandclient.cpp
+@@ -7,6 +7,7 @@
+ */
+
+ #include "waylandclient.h"
++#include "platform.h"
+ #include "screens.h"
+ #include "wayland_server.h"
+ #include "workspace.h"
+@@ -289,6 +290,7 @@ void WaylandClient::updateGeometry(const QRect &rect)
+ const QRect oldClientGeometry = m_clientGeometry;
+ const QRect oldFrameGeometry = m_frameGeometry;
+ const QRect oldBufferGeometry = m_bufferGeometry;
++ const AbstractOutput *oldOutput = m_output;
+
+ m_clientGeometry = frameRectToClientRect(rect);
+ m_frameGeometry = rect;
+@@ -310,6 +312,7 @@ void WaylandClient::updateGeometry(const QRect &rect)
+ return;
+ }
+
++ m_output = kwinApp()->platform()->outputAt(rect.center());
+ updateWindowRules(Rules::Position | Rules::Size);
+
+ if (changedGeometries & WaylandGeometryBuffer) {
+@@ -321,6 +324,9 @@ void WaylandClient::updateGeometry(const QRect &rect)
+ if (changedGeometries & WaylandGeometryFrame) {
+ Q_EMIT frameGeometryChanged(this, oldFrameGeometry);
+ }
++ if (oldOutput != m_output) {
++ Q_EMIT screenChanged();
++ }
+ Q_EMIT geometryShapeChanged(this, oldFrameGeometry);
+ }
+
+diff --git a/src/x11client.cpp b/src/x11client.cpp
+index ce275fff1b..d7ed823128 100644
+--- a/src/x11client.cpp
++++ b/src/x11client.cpp
+@@ -4062,6 +4062,8 @@ void X11Client::moveResizeInternal(const QRect &rect, MoveResizeMode mode)
+ m_lastClientGeometry == m_clientGeometry) {
+ return;
+ }
++
++ m_output = kwinApp()->platform()->outputAt(frameGeometry.center());
+ if (areGeometryUpdatesBlocked()) {
+ setPendingMoveResizeMode(mode);
+ return;
+@@ -4070,6 +4072,7 @@ void X11Client::moveResizeInternal(const QRect &rect, MoveResizeMode mode)
+ const QRect oldBufferGeometry = m_lastBufferGeometry;
+ const QRect oldFrameGeometry = m_lastFrameGeometry;
+ const QRect oldClientGeometry = m_lastClientGeometry;
++ const AbstractOutput *oldOutput = m_lastOutput;
+
+ updateServerGeometry();
+ updateWindowRules(Rules::Position|Rules::Size);
+@@ -4077,6 +4080,7 @@ void X11Client::moveResizeInternal(const QRect &rect, MoveResizeMode mode)
+ m_lastBufferGeometry = m_bufferGeometry;
+ m_lastFrameGeometry = m_frameGeometry;
+ m_lastClientGeometry = m_clientGeometry;
++ m_lastOutput = m_output;
+
+ if (isActive()) {
+ workspace()->setActiveOutput(output());
+@@ -4092,6 +4096,9 @@ void X11Client::moveResizeInternal(const QRect &rect, MoveResizeMode mode)
+ if (oldFrameGeometry != m_frameGeometry) {
+ Q_EMIT frameGeometryChanged(this, oldFrameGeometry);
+ }
++ if (oldOutput != m_output) {
++ Q_EMIT screenChanged();
++ }
+ Q_EMIT geometryShapeChanged(this, oldFrameGeometry);
+ }
+
+diff --git a/src/x11client.h b/src/x11client.h
+index b523044d3d..adb8b0e8df 100644
+--- a/src/x11client.h
++++ b/src/x11client.h
+@@ -524,6 +524,7 @@ private:
+ QMetaObject::Connection m_edgeGeometryTrackingConnection;
+
+ QMargins m_clientFrameExtents;
++ AbstractOutput *m_lastOutput = nullptr;
+ QRect m_lastBufferGeometry;
+ QRect m_lastFrameGeometry;
+ QRect m_lastClientGeometry;
+--
+GitLab
+
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch
new file mode 100644
index 000000000000..026efdf9465b
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch
@@ -0,0 +1,35 @@
+From a8477c1cf7acbf3358c85e53b236150dd43b4640 Mon Sep 17 00:00:00 2001
+From: Xaver Hugl <xaver.hugl@gmail.com>
+Date: Thu, 14 Apr 2022 18:48:56 +0200
+Subject: [PATCH] toplevel: set valid output in the constructor
+
+This makes it less easy to cause crashes and fixes some segfaults.
+
+BUG: 452433
+BUG: 448064
+
+(cherry picked from commit e48a5c0535f01dc380449ba8481c869ff23e5558)
+
+Tested-by: Merge Service <https://invent.kde.org/plasma/kwin/-/merge_requests/2448>
+Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/2448>
+---
+ src/toplevel.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/toplevel.cpp b/src/toplevel.cpp
+index ff216835c4..5d3d7a5dde 100644
+--- a/src/toplevel.cpp
++++ b/src/toplevel.cpp
+@@ -34,7 +34,8 @@ namespace KWin
+ {
+
+ Toplevel::Toplevel()
+- : m_visual(XCB_NONE)
++ : m_output(workspace()->activeOutput())
++ , m_visual(XCB_NONE)
+ , bit_depth(24)
+ , info(nullptr)
+ , ready_for_painting(false)
+--
+GitLab
+
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-tabbox-dont-dismiss-popups.patch b/kde-plasma/kwin/files/kwin-5.24.5-tabbox-dont-dismiss-popups.patch
new file mode 100644
index 000000000000..f79d4bba71ce
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-tabbox-dont-dismiss-popups.patch
@@ -0,0 +1,32 @@
+From f7b1edc79e9526fe6bad69a8ad475a5d77e5aead Mon Sep 17 00:00:00 2001
+From: Xaver Hugl <xaver.hugl@gmail.com>
+Date: Tue, 10 May 2022 13:07:03 +0200
+Subject: [PATCH] tabbox: don't dismiss popups
+
+The glitches that dismissing popups was supposed to prevent are apparently
+no longer present.
+
+BUG: 446318
+(cherry picked from commit 94b0ca814688bf3622aa53f4d4d26f97d8de7306)
+---
+ src/tabbox/tabbox.cpp | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/tabbox/tabbox.cpp b/src/tabbox/tabbox.cpp
+index a1c50b27fc..76a50795ad 100644
+--- a/src/tabbox/tabbox.cpp
++++ b/src/tabbox/tabbox.cpp
+@@ -1020,10 +1020,6 @@ void TabBox::navigatingThroughWindows(bool forward, const QKeySequence &shortcut
+ // CDE style raise / lower
+ CDEWalkThroughWindows(forward);
+ } else {
+- workspace()->forEachAbstractClient([](Toplevel *toplevel) {
+- if (toplevel->isPopupWindow())
+- toplevel->popupDone();
+- });
+ if (areModKeysDepressed(shortcut)) {
+ if (startKDEWalkThroughWindows(mode))
+ KDEWalkThroughWindows(forward);
+--
+GitLab
+
diff --git a/kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch b/kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch
new file mode 100644
index 000000000000..d1dbb3fb9bb8
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch
@@ -0,0 +1,32 @@
+From 1b96d21507a3b6b0a9ac6eac424d4e4db5602839 Mon Sep 17 00:00:00 2001
+From: David Redondo <kde@david-redondo.de>
+Date: Wed, 18 May 2022 13:34:45 +0200
+Subject: [PATCH] Update device outputName when setting output
+
+BUG:451279
+FIXED-IN:5.25.0
+
+
+(cherry picked from commit d3a37aa9aef58fbaedcef77d2797c22a015dc9c0)
+---
+ src/backends/libinput/device.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/backends/libinput/device.cpp b/src/backends/libinput/device.cpp
+index f247b66d74..30f51aca3c 100644
+--- a/src/backends/libinput/device.cpp
++++ b/src/backends/libinput/device.cpp
+@@ -668,8 +668,10 @@ void Device::setOutput(AbstractOutput *output)
+ {
+ m_output = output;
+ if (m_output) {
++ m_outputName = output->name();
+ writeEntry(ConfigKey::OutputName, output->name());
+ } else {
++ m_outputName = QString();
+ writeEntry(ConfigKey::OutputName, QString());
+ }
+ Q_EMIT outputNameChanged();
+--
+GitLab
+
diff --git a/kde-plasma/kwin/kwin-5.24.5.ebuild b/kde-plasma/kwin/kwin-5.24.5-r2.ebuild
index a47f4289b4c9..8e56a5025394 100644
--- a/kde-plasma/kwin/kwin-5.24.5.ebuild
+++ b/kde-plasma/kwin/kwin-5.24.5-r2.ebuild
@@ -15,7 +15,7 @@ DESCRIPTION="Flexible, composited Window Manager for windowing systems on Linux"
LICENSE="GPL-2+"
SLOT="5"
-KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
+KEYWORDS="amd64 ~arm arm64 ~ppc64 ~riscv x86"
IUSE="accessibility caps gles2-only multimedia plasma screencast"
RESTRICT="test"
@@ -99,6 +99,15 @@ DEPEND="${COMMON_DEPEND}
BDEPEND="test? ( >=dev-qt/qtwaylandscanner-${QTMIN}:5 )"
PDEPEND=">=kde-plasma/kde-cli-tools-${PVCUT}:5"
+PATCHES=(
+ "${FILESDIR}"/${P}-fix-multi-gpu-double-copy.patch # KDE-bug 453386
+ "${FILESDIR}"/${P}-tabbox-dont-dismiss-popups.patch # KDE-bug 446318
+ "${FILESDIR}"/${P}-effects-overview-hide-panels.patch # KDE-bug 444274
+ "${FILESDIR}"/${P}-fix-nvidia-render-glitches.patch
+ "${FILESDIR}"/${P}-update-device-outputName.patch # KDE-bug 451279
+ "${FILESDIR}"/${P}-fix-plasmashell-crash-{1,2}.patch # KDE-bugs 448064, 452433
+)
+
src_prepare() {
ecm_src_prepare
use multimedia || eapply "${FILESDIR}/${PN}-5.21.80-gstreamer-optional.patch"
diff --git a/kde-plasma/kwin/kwin-5.24.4-r1.ebuild b/kde-plasma/kwin/kwin-5.25.2.ebuild
index 354b862b91c3..4b4bb9fd0c9a 100644
--- a/kde-plasma/kwin/kwin-5.24.4-r1.ebuild
+++ b/kde-plasma/kwin/kwin-5.25.2.ebuild
@@ -5,9 +5,9 @@ EAPI=8
ECM_HANDBOOK="optional"
ECM_TEST="optional"
-KFMIN=5.90.0
+KFMIN=5.94.0
PVCUT=$(ver_cut 1-3)
-QTMIN=5.15.2
+QTMIN=5.15.4
VIRTUALX_REQUIRED="test"
inherit ecm kde.org optfeature
@@ -15,24 +15,25 @@ 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"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+IUSE="accessibility caps gles2-only lock multimedia plasma screencast"
RESTRICT="test"
COMMON_DEPEND="
>=dev-libs/libinput-1.19
- >=dev-libs/wayland-1.2
+ >=dev-libs/wayland-1.20.0
+ >=dev-qt/qtconcurrent-${QTMIN}:5
>=dev-qt/qtdbus-${QTMIN}:5
>=dev-qt/qtdeclarative-${QTMIN}:5
- >=dev-qt/qtgui-${QTMIN}:5=[gles2-only=,libinput]
+ >=dev-qt/qtgui-${QTMIN}:5=[egl,gles2-only=,libinput]
+ >=dev-qt/qtwayland-${QTMIN}:5
>=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/kconfig-${KFMIN}:5[qml]
>=kde-frameworks/kconfigwidgets-${KFMIN}:5
>=kde-frameworks/kcoreaddons-${KFMIN}:5
>=kde-frameworks/kcrash-${KFMIN}:5
@@ -40,13 +41,12 @@ COMMON_DEPEND="
>=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/kitemviews-${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]
@@ -54,18 +54,18 @@ COMMON_DEPEND="
>=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/libglvnd
>=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/libxcvt-0.1.1
>=x11-libs/libxkbcommon-0.7.0
x11-libs/xcb-util-cursor
x11-libs/xcb-util-image
@@ -74,10 +74,12 @@ COMMON_DEPEND="
accessibility? ( media-libs/libqaccessibilityclient:5 )
caps? ( sys-libs/libcap )
gles2-only? ( media-libs/mesa[gles2] )
+ lock? ( >=kde-plasma/kscreenlocker-${PVCUT}:5 )
plasma? ( >=kde-frameworks/krunner-${KFMIN}:5 )
screencast? ( >=media-video/pipewire-0.3:= )
"
RDEPEND="${COMMON_DEPEND}
+ !kde-plasma/kwayland-server
>=dev-qt/qtquickcontrols-${QTMIN}:5
>=dev-qt/qtquickcontrols2-${QTMIN}:5
>=dev-qt/qtvirtualkeyboard-${QTMIN}:5
@@ -88,29 +90,18 @@ RDEPEND="${COMMON_DEPEND}
multimedia? ( >=dev-qt/qtmultimedia-${QTMIN}:5[gstreamer,qml] )
"
DEPEND="${COMMON_DEPEND}
+ dev-libs/plasma-wayland-protocols
+ >=dev-libs/wayland-protocols-1.25
>=dev-qt/designer-${QTMIN}:5
>=dev-qt/qtconcurrent-${QTMIN}:5
x11-base/xorg-proto
- test? (
- dev-libs/plasma-wayland-protocols
- >=dev-libs/wayland-protocols-1.19
- )
"
-BDEPEND="test? ( >=dev-qt/qtwaylandscanner-${QTMIN}:5 )"
+BDEPEND="
+ >=dev-qt/qtwaylandscanner-${QTMIN}:5
+ dev-util/wayland-scanner
+"
PDEPEND=">=kde-plasma/kde-cli-tools-${PVCUT}:5"
-PATCHES=(
- "${FILESDIR}"/${P}-waylandserver-lockScreenShown.patch
- "${FILESDIR}"/${P}-xdgactivation-demand-attention.patch
- "${FILESDIR}"/${P}-waylandserver-move-LockScreenPresentationWatcher.patch
- "${FILESDIR}"/${P}-backends-drm-dont-perm-disable-vrr.patch
- "${FILESDIR}"/${P}-backends-drm-fetch-immutable-blobs.patch # KDE-bug 449285
- "${FILESDIR}"/${P}-dont-send-geom-to-text-input.patch
- "${FILESDIR}"/${P}-fix-current-VD-always-added.patch # KDE-bug 452171
- "${FILESDIR}"/${P}-dont-use-xcb-in-wayland.patch # KDE-bug 450564
- "${FILESDIR}"/${P}-fix-unlocking-wayland-sessions.patch # KDE-bug 447705
-)
-
src_prepare() {
ecm_src_prepare
use multimedia || eapply "${FILESDIR}/${PN}-5.21.80-gstreamer-optional.patch"
@@ -123,8 +114,10 @@ src_prepare() {
src_configure() {
local mycmakeargs=(
+ # KWIN_BUILD_NOTIFICATIONS exists, but kdeclarative still hard-depends on it
$(cmake_use_find_package accessibility QAccessibilityClient)
$(cmake_use_find_package caps Libcap)
+ -DKWIN_BUILD_SCREENLOCKER=$(usex lock)
$(cmake_use_find_package plasma KF5Runner)
)
diff --git a/kde-plasma/kwin/metadata.xml b/kde-plasma/kwin/metadata.xml
index 5c6a9ef157a9..d71da9e2cb08 100644
--- a/kde-plasma/kwin/metadata.xml
+++ b/kde-plasma/kwin/metadata.xml
@@ -9,6 +9,7 @@
<bugs-to>https://bugs.kde.org/</bugs-to>
</upstream>
<use>
+ <flag name="lock">Enable screen locking via <pkg>kde-plasma/kscreenlocker</pkg></flag>
<flag name="multimedia">Enable effect video button in desktop effects KCM</flag>
<flag name="screencast">Enable screencast portal using <pkg>media-video/pipewire</pkg></flag>
</use>