From 4156a0af4d674a1e1391609b901088933725152a Mon Sep 17 00:00:00 2001 From: Alex Nemeth Date: Tue, 1 May 2018 23:06:47 +0200 Subject: [PATCH] [effects/slideback] Enable blur behind windows Summary: Use the blur effect even while the window is sliding back. Test Plan: {F5828577} Reviewers: #kwin, #vdg, graesslin, ngraham Reviewed By: #kwin, #vdg, graesslin, ngraham Subscribers: ngraham, graesslin, kwin, #kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D12625 --- effects/slideback/slideback.cpp | 11 +++++++++++ effects/slideback/slideback.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/effects/slideback/slideback.cpp b/effects/slideback/slideback.cpp index a3bbe2ed67..14e823eee4 100644 --- a/effects/slideback/slideback.cpp +++ b/effects/slideback/slideback.cpp @@ -149,6 +149,12 @@ void SlideBackEffect::prePaintScreen(ScreenPrePaintData &data, int time) motionManager.calculate(time); data.mask |= Effect::PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS; } + + for (auto const &w : effects->stackingOrder()) { + m_windowForceBlurRoleState[w] = w->data(WindowForceBlurRole).toBool(); + w->setData(WindowForceBlurRole, QVariant(true)); + } + effects->prePaintScreen(data, time); } @@ -157,6 +163,11 @@ void SlideBackEffect::postPaintScreen() if (motionManager.areWindowsMoving()) { effects->addRepaintFull(); } + + for (auto &w : effects->stackingOrder()) { + w->setData(WindowForceBlurRole, m_windowForceBlurRoleState.value(w, false)); + } + effects->postPaintScreen(); } diff --git a/effects/slideback/slideback.h b/effects/slideback/slideback.h index c71502e5e4..893b30c55b 100644 --- a/effects/slideback/slideback.h +++ b/effects/slideback/slideback.h @@ -66,6 +66,8 @@ private: int m_tabboxActive; QList clippedRegions; + QMap m_windowForceBlurRoleState; + QRect getSlideDestination(const QRect &windowUnderGeometry, const QRect &windowOverGeometry); bool isWindowUsable(EffectWindow *w); bool intersects(EffectWindow *windowUnder, const QRect &windowOverGeometry);