summaryrefslogtreecommitdiff
path: root/kde-plasma/kwin/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-11-18 09:38:27 +0000
committerV3n3RiX <venerix@redcorelinux.org>2018-11-18 09:38:27 +0000
commit536c3711867ec947c1738f2c4b96f22e4863322d (patch)
tree697733f5cb713908dcf378e13fd15a798a906a91 /kde-plasma/kwin/files
parentf65628136faa35d0c4d3b5e7332275c7b35fcd96 (diff)
gentoo resync : 18.11.2018
Diffstat (limited to 'kde-plasma/kwin/files')
-rw-r--r--kde-plasma/kwin/files/kwin-5.14.3-kcrash-init.patch48
-rw-r--r--kde-plasma/kwin/files/kwin-5.14.3-resizewindows-crash.patch72
-rw-r--r--kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch137
3 files changed, 257 insertions, 0 deletions
diff --git a/kde-plasma/kwin/files/kwin-5.14.3-kcrash-init.patch b/kde-plasma/kwin/files/kwin-5.14.3-kcrash-init.patch
new file mode 100644
index 000000000000..fc9c3007f840
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.14.3-kcrash-init.patch
@@ -0,0 +1,48 @@
+From aace9b1675819feab81d50f694391c7d854d9822 Mon Sep 17 00:00:00 2001
+From: Harald Sitter <sitter@kde.org>
+Date: Fri, 16 Nov 2018 12:50:53 +0100
+Subject: actually initialize kcrash for xclipboardsync
+
+Summary:
+to successfully use kcrash when linking with as-needed (which is a default
+flag on many linux distros) one also needs to call KCrash::initialize.
+
+https://markmail.org/thread/zv5pheijaze72bzs
+
+Test Plan: builds; correctly links kcrash
+
+Reviewers: davidedmundson
+
+Reviewed By: davidedmundson
+
+Subscribers: kwin
+
+Tags: #kwin
+
+Differential Revision: https://phabricator.kde.org/D16923
+---
+ helpers/xclipboardsync/main.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/helpers/xclipboardsync/main.cpp b/helpers/xclipboardsync/main.cpp
+index 2f06e9c..1a5e5ee 100644
+--- a/helpers/xclipboardsync/main.cpp
++++ b/helpers/xclipboardsync/main.cpp
+@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *********************************************************************/
+ #include "waylandclipboard.h"
+
++#include <KCrash>
+ #include <QGuiApplication>
+
+ #include <config-kwin.h>
+@@ -40,6 +41,7 @@ int main(int argc, char *argv[])
+ argv[0], qPrintable(app.platformName()));
+ return 1;
+ }
++ KCrash::initialize();
+ new WaylandClipboard(&app);
+ return app.exec();
+ }
+--
+cgit v0.11.2
diff --git a/kde-plasma/kwin/files/kwin-5.14.3-resizewindows-crash.patch b/kde-plasma/kwin/files/kwin-5.14.3-resizewindows-crash.patch
new file mode 100644
index 000000000000..37963c8395c5
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.14.3-resizewindows-crash.patch
@@ -0,0 +1,72 @@
+From 406b70b04e093c13faf763e2d885797ae037d806 Mon Sep 17 00:00:00 2001
+From: Vlad Zagorodniy <vladzzag@gmail.com>
+Date: Mon, 12 Nov 2018 17:45:14 +0200
+Subject: [wayland] Don't crash when resizing windows
+
+Summary:
+If you resize a decorated client by using the resize user action(press
+Alt + F3 > More Actions > Resize), then KWin will crash because it gets
+stuck in an infinite loop (AbstractClient::performMoveResize <->
+ShellClient::setGeometry).
+
+Here's how KWin gets stuck in that loop:
+* when you finish resizing the client, AbstractClient::keyPressEvent
+ will call AbstractClient::finishMoveResize;
+* the first thing that finishMoveResize does is block geometry updates,
+ then it does some clean up (e.g. reset the value of isMoveResize(), etc),
+ updates the geometry of the client and when it's done, it will emit
+ clientFinishUserMoveResized signal;
+* when PointerInputRedirection notices that signal, it will call
+ processDecorationMove on the client, which in its turn will indirectly
+ call AbstractClient::startMoveResize;
+* when it's time to go back to AbstractClient::keyPressEvent, geometry
+ updates are unblocked and if there are any pending geometry updates,
+ then ShellClient::setGeometry will be called;
+* ShellClient::setGeometry will eventually call ShellClient::doSetGeometry;
+* ShellClient::doSetGeometry will call AbstractClient::performMoveResize
+ because AbstractClient::processDecorationMove indirectly called
+ AbstractClient::startMoveResize;
+* AbstractClient::performMoveResize calls ShellClient::setGeometry;
+* (at this point, KWin got stuck in the infinite loop)
+
+This change swaps setMoveResizePointerButtonDown and finishMoveResize,
+so processDecorationMove won't indirectly call startMoveResize.
+
+BUG: 397577
+FIXED-IN: 5.14.4
+
+Reviewers: #kwin, davidedmundson
+
+Reviewed By: #kwin, davidedmundson
+
+Subscribers: kwin
+
+Tags: #kwin
+
+Differential Revision: https://phabricator.kde.org/D16846
+---
+ abstract_client.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/abstract_client.cpp b/abstract_client.cpp
+index b4628f2..ed72b9c 100644
+--- a/abstract_client.cpp
++++ b/abstract_client.cpp
+@@ -1457,13 +1457,13 @@ void AbstractClient::keyPressEvent(uint key_code)
+ case Qt::Key_Space:
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+- finishMoveResize(false);
+ setMoveResizePointerButtonDown(false);
++ finishMoveResize(false);
+ updateCursor();
+ break;
+ case Qt::Key_Escape:
+- finishMoveResize(true);
+ setMoveResizePointerButtonDown(false);
++ finishMoveResize(true);
+ updateCursor();
+ break;
+ default:
+--
+cgit v0.11.2
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
new file mode 100644
index 000000000000..4e480a06be8e
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.14.3-virtualdesktop-crash.patch
@@ -0,0 +1,137 @@
+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