diff options
Diffstat (limited to 'kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch')
-rw-r--r-- | kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch b/kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch deleted file mode 100644 index 4e480a06be8e..000000000000 --- a/kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch +++ /dev/null @@ -1,137 +0,0 @@ -From ad28da84e78c7eb7ff1e608c4819707b2142daea Mon Sep 17 00:00:00 2001 -From: Vlad Zagorodniy <vladzzag@gmail.com> -Date: Mon, 5 Nov 2018 14:59:42 +0200 -Subject: [effects/slidingpopups] Don't crash when sliding virtual desktops - -Summary: -If you switch virtual desktops while krunner is sliding in, then -depending on whether your distro strips assert statements away, -KWin can crash. - -The reason why it crashes is the sliding popups effect tries to unref -deleted windows that it hasn't referenced before (if there is an active -full screen effect, then popups won't be slided out, which in its turn -means that we won't reference deleted windows). So, in the end, the -refcount of those windows can be -1. That triggers an assert statement -in the destructor of the Deleted class, which checks whether the -refcount is equal to 0. - -Popups are not slided while there is an active full screen effect because -we don't know what the full screen effect does. - -This patch adjusts the sliding popups effect so it stops all active -animations when user switches virtual desktops or when a full screen -effect kicks in. We need to do that so the effect won't try to -unreference windows in postPaintWindow. - -Visually, it doesn't look quite nice, but for now that's good enough. -A proper fix would be more complex: we would need to make sure that -full screen effects ignore sliding popups (and also maybe docks) and -perform some input redirection. - -BUG: 400170 -FIXED-IN: 5.14.4 - -Test Plan: I'm not able anymore to reproduce bug 400170. - -Reviewers: #kwin, graesslin - -Reviewed By: #kwin, graesslin - -Subscribers: davidedmundson, graesslin, kwin - -Tags: #kwin - -Differential Revision: https://phabricator.kde.org/D16731 ---- - effects/slidingpopups/slidingpopups.cpp | 22 ++++++++++++++++++++++ - effects/slidingpopups/slidingpopups.h | 6 +++--- - 2 files changed, 25 insertions(+), 3 deletions(-) - -diff --git a/effects/slidingpopups/slidingpopups.cpp b/effects/slidingpopups/slidingpopups.cpp -index a104a5c..066b2a3 100644 ---- a/effects/slidingpopups/slidingpopups.cpp -+++ b/effects/slidingpopups/slidingpopups.cpp -@@ -3,6 +3,7 @@ - This file is part of the KDE project. - - Copyright (C) 2009 Marco Martin notmart@gmail.com -+Copyright (C) 2018 Vlad Zagorodniy <vladzzag@gmail.com> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -53,6 +54,11 @@ SlidingPopupsEffect::SlidingPopupsEffect() - m_atom = effects->announceSupportProperty(QByteArrayLiteral("_KDE_SLIDE"), this); - } - ); -+ connect(effects, qOverload<int, int, EffectWindow *>(&EffectsHandler::desktopChanged), -+ this, &SlidingPopupsEffect::stopAnimations); -+ connect(effects, &EffectsHandler::activeFullScreenEffectChanged, -+ this, &SlidingPopupsEffect::stopAnimations); -+ - reconfigure(ReconfigureAll); - } - -@@ -434,6 +440,22 @@ void SlidingPopupsEffect::slideOut(EffectWindow *w) - w->addRepaintFull(); - } - -+void SlidingPopupsEffect::stopAnimations() -+{ -+ for (auto it = m_animations.constBegin(); it != m_animations.constEnd(); ++it) { -+ EffectWindow *w = it.key(); -+ -+ if (w->isDeleted()) { -+ w->unrefWindow(); -+ } else { -+ w->setData(WindowForceBackgroundContrastRole, QVariant()); -+ w->setData(WindowForceBlurRole, QVariant()); -+ } -+ } -+ -+ m_animations.clear(); -+} -+ - bool SlidingPopupsEffect::isActive() const - { - return !m_animations.isEmpty(); -diff --git a/effects/slidingpopups/slidingpopups.h b/effects/slidingpopups/slidingpopups.h -index 821640a..32e8fb5 100644 ---- a/effects/slidingpopups/slidingpopups.h -+++ b/effects/slidingpopups/slidingpopups.h -@@ -3,6 +3,7 @@ - This file is part of the KDE project. - - Copyright (C) 2009 Marco Martin notmart@gmail.com -+Copyright (C) 2018 Vlad Zagorodniy <vladzzag@gmail.com> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -49,8 +50,6 @@ public: - - static bool supported(); - -- // TODO react also on virtual desktop changes -- - int slideInDuration() const; - int slideOutDuration() const; - -@@ -62,6 +61,7 @@ private Q_SLOTS: - - void slideIn(EffectWindow *w); - void slideOut(EffectWindow *w); -+ void stopAnimations(); - - private: - void setupAnimData(EffectWindow *w); -@@ -81,7 +81,7 @@ private: - AnimationKind kind; - TimeLine timeLine; - }; -- QHash<const EffectWindow*, Animation> m_animations; -+ QHash<EffectWindow *, Animation> m_animations; - - enum class Location { - Left, --- -cgit v0.11.2 |