From dfd8bcdecaf5a6075b9bf46ad3e23adf357e7dfb Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 26 Dec 2019 22:24:04 +0200 Subject: [PATCH] wayland improvements for WindowsAlwaysCover --- app/view/view.cpp | 4 +- app/view/visibilitymanager.cpp | 14 +++++-- app/wm/waylandinterface.cpp | 40 +++++++++++++++++++ .../package/contents/ui/task/TaskItem.qml | 4 +- 4 files changed, 56 insertions(+), 6 deletions(-) diff --git a/app/view/view.cpp b/app/view/view.cpp index 0289fa074..0a06cd88d 100644 --- a/app/view/view.cpp +++ b/app/view/view.cpp @@ -330,7 +330,9 @@ void View::setupWaylandIntegration() m_shellSurface = interface->createSurface(s, this); qDebug() << "WAYLAND dock window surface was created..."; - m_corona->wm()->setViewExtraFlags(m_shellSurface); + if (m_visibility) { + m_visibility->initViewFlags(); + } } } diff --git a/app/view/visibilitymanager.cpp b/app/view/visibilitymanager.cpp index 509bf7d0d..fbccca39d 100644 --- a/app/view/visibilitymanager.cpp +++ b/app/view/visibilitymanager.cpp @@ -120,10 +120,18 @@ Types::Visibility VisibilityManager::mode() const void VisibilityManager::initViewFlags() { - if ((m_mode == Types::WindowsCanCover || m_mode == Types::WindowsAlwaysCover) && (!m_latteView->inEditMode())) { - m_wm->setViewExtraFlags(m_latteView, false, m_mode); + if (KWindowSystem::isPlatformX11()) { + if ((m_mode == Types::WindowsCanCover || m_mode == Types::WindowsAlwaysCover) && (!m_latteView->inEditMode())) { + m_wm->setViewExtraFlags(m_latteView, false, m_mode); + } else { + m_wm->setViewExtraFlags(m_latteView, true); + } } else { - m_wm->setViewExtraFlags(m_latteView, true); + if ((m_mode == Types::WindowsCanCover || m_mode == Types::WindowsAlwaysCover) && (!m_latteView->inEditMode())) { + m_wm->setViewExtraFlags(m_latteView, false, m_mode); + } else { + m_wm->setViewExtraFlags(m_latteView, true); + } } } diff --git a/app/wm/waylandinterface.cpp b/app/wm/waylandinterface.cpp index 77dad6061..6e866d09b 100644 --- a/app/wm/waylandinterface.cpp +++ b/app/wm/waylandinterface.cpp @@ -21,6 +21,7 @@ #include "waylandinterface.h" // local +#include "view/positioner.h" #include "view/screenedgeghostwindow.h" #include "view/view.h" #include "../lattecorona.h" @@ -246,6 +247,11 @@ void WaylandInterface::unregisterIgnoredWindow(WindowId wid) void WaylandInterface::setViewExtraFlags(QObject *view, bool isPanelWindow, Latte::Types::Visibility mode) { KWayland::Client::PlasmaShellSurface *surface = qobject_cast(view); + Latte::View *latteView = qobject_cast(view); + + if (latteView) { + surface = latteView->surface(); + } if (!surface) { return; @@ -256,9 +262,43 @@ void WaylandInterface::setViewExtraFlags(QObject *view, bool isPanelWindow, Latt surface->setSkipSwitcher(true); #endif + bool atBottom{!isPanelWindow && (mode == Latte::Types::WindowsCanCover || mode == Latte::Types::WindowsAlwaysCover)}; + if (isPanelWindow) { surface->setRole(PlasmaShellSurface::Role::Panel); surface->setPanelBehavior(PlasmaShellSurface::PanelBehavior::WindowsGoBelow); + } else { + surface->setRole(PlasmaShellSurface::Role::Normal); + } + + if (latteView) { + WindowId winId = latteView->positioner()->trackedWindowId(); + + auto w = windowFor(winId); + if (w && !w->isOnAllDesktops()) { + requestToggleIsOnAllDesktops(winId); + } + + //! Layer to be applied + if (mode == Latte::Types::WindowsCanCover || mode == Latte::Types::WindowsAlwaysCover) { + setKeepBelow(winId, true); + } else if (mode == Latte::Types::NormalWindow) { + setKeepBelow(winId, false); + setKeepAbove(winId, false); + } else { + setKeepAbove(winId, true); + } + } + + if (atBottom){ + //! trying to workaround WM behavior in order + //! 1. View at the end MUST NOT HAVE FOCUSABILITY (issue example: clicking a single active task is not minimized) + //! 2. View at the end MUST BE AT THE BOTTOM of windows stack + + QTimer::singleShot(50, [this, surface]() { + surface->setRole(PlasmaShellSurface::Role::ToolTip); + }); + } } diff --git a/plasmoid/package/contents/ui/task/TaskItem.qml b/plasmoid/package/contents/ui/task/TaskItem.qml index ec34e1f07..0f249260e 100644 --- a/plasmoid/package/contents/ui/task/TaskItem.qml +++ b/plasmoid/package/contents/ui/task/TaskItem.qml @@ -1013,11 +1013,11 @@ MouseArea{ root.presentWindows(root.plasma515 ? model.WinIdList: model.LegacyWinIdList ); } } else { - if (IsMinimized === true) { + if (isMinimized) { var i = modelIndex(); tasksModel.requestToggleMinimized(i); tasksModel.requestActivate(i); - } else if (IsActive === true) { + } else if (isActive) { tasksModel.requestToggleMinimized(modelIndex()); } else { tasksModel.requestActivate(modelIndex());