diff options
author | V3n3RiX <venerix@koprulu.sector> | 2022-06-29 12:04:12 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2022-06-29 12:04:12 +0100 |
commit | 0f558761aa2dee1017b4751e4017205e015a9560 (patch) | |
tree | 037df795519468a25d9362b4e95cdaeb84eb1cf9 /kde-plasma/kwin/files | |
parent | 752d6256e5204b958b0ef7905675a940b5e9172f (diff) |
gentoo resync : 29.12.2022
Diffstat (limited to 'kde-plasma/kwin/files')
16 files changed, 572 insertions, 568 deletions
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 + |