From 558b86e9f6c08fde10933b3a3c7c126ba287c408 Mon Sep 17 00:00:00 2001 From: Vlad Zagorodniy Date: Mon, 29 Oct 2018 14:29:47 +0200 Subject: [PATCH] [effects/desktopgrid] Don't display the close button from Present Windows Summary: If you activate the Present Windows effect and then the Desktop Grid, you'll be able to see the close button from PW. The reason for that is PW doesn't destroy the close button and DG doesn't filter it out. This patch addesses this problem by syncing DesktopGridEffect::isRelevantWithPresentWindows with PresentWindowsEffect::isSelectableWindow. On X11, the close button is filtered by the isSpecialWindow check. On Wayland, the close button is filtered by the acceptsFocus check. The proposed solution is kinda hack-ish, but on the other hand, we have to keep those two methods in sync anyway. In addition to the close button, notifications won't be displayed too. BUG: 364710 FIXED-IN: 5.14.3 Test Plan: * Activate the Present Windows effect; * Activate the Desktop Grid effect; * (the close button is no longer visible) Reviewers: #kwin, graesslin Reviewed By: #kwin, graesslin Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D16513 --- effects/desktopgrid/desktopgrid.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/effects/desktopgrid/desktopgrid.cpp b/effects/desktopgrid/desktopgrid.cpp index c735f793aa..7cb5612108 100644 --- a/effects/desktopgrid/desktopgrid.cpp +++ b/effects/desktopgrid/desktopgrid.cpp @@ -1392,8 +1392,31 @@ bool DesktopGridEffect::isActive() const bool DesktopGridEffect::isRelevantWithPresentWindows(EffectWindow *w) const { - return !(w->isDesktop() || w->isDock() || w->isSkipSwitcher() || w->isOnScreenDisplay()) && - w->isCurrentTab() && w->isOnCurrentActivity(); + if (w->isSpecialWindow() || w->isUtility()) { + return false; + } + + if (w->isSkipSwitcher()) { + return false; + } + + if (w->isDeleted()) { + return false; + } + + if (!w->acceptsFocus()) { + return false; + } + + if (!w->isCurrentTab()) { + return false; + } + + if (!w->isOnCurrentActivity()) { + return false; + } + + return true; } /************************************************