From 719c852c8c93df2c8e17a75ee3b1f96d79e1fd96 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 7 Mar 2020 15:36:39 +0200 Subject: [PATCH] update availableScree...WithCriteria functions --use ignoredModes/Edges instead of accepted ones in order to make code more readable and easy to understand --- app/lattecorona.cpp | 24 +++++++++++------------ app/lattecorona.h | 8 ++++---- app/plasma/extended/screengeometries.cpp | 4 ++-- app/plasma/extended/screengeometries.h | 11 ++++------- app/view/positioner.cpp | 25 +++++++++++------------- app/wm/tracker/windowstracker.cpp | 2 +- app/wm/tracker/windowstracker.h | 13 ++++++++++++ 7 files changed, 47 insertions(+), 40 deletions(-) diff --git a/app/lattecorona.cpp b/app/lattecorona.cpp index aa7459bdc..57e8ccca7 100644 --- a/app/lattecorona.cpp +++ b/app/lattecorona.cpp @@ -530,8 +530,8 @@ QRegion Corona::availableScreenRegion(int id) const QRegion Corona::availableScreenRegionWithCriteria(int id, QString forLayout, - QList modes, - QList edges, + QList ignoreModes, + QList ignoreEdges, bool includeExternalPanels) const { const QScreen *screen = m_screenPool->screenForId(id); @@ -547,14 +547,14 @@ QRegion Corona::availableScreenRegionWithCriteria(int id, return available; } - bool allModes = modes.isEmpty(); - bool allEdges = edges.isEmpty(); + bool allModes = ignoreModes.isEmpty(); + bool allEdges = ignoreEdges.isEmpty(); QList views = layout->latteViews(); for (const auto *view : views) { if (view && view->containment() && view->screen() == screen - && ((allEdges || edges.contains(view->location())) - && (allModes || (view->visibility() && modes.contains(view->visibility()->mode()))))) { + && ((allEdges || !ignoreEdges.contains(view->location())) + && (allModes || (view->visibility() && !ignoreModes.contains(view->visibility()->mode()))))) { int realThickness = view->normalThickness(); // Usually availableScreenRect is used by the desktop, @@ -709,8 +709,8 @@ QRect Corona::availableScreenRect(int id) const QRect Corona::availableScreenRectWithCriteria(int id, QString forLayout, - QList modes, - QList edges, + QList ignoreModes, + QList ignoreEdges, bool includeExternalPanels) const { const QScreen *screen = m_screenPool->screenForId(id); @@ -726,14 +726,14 @@ QRect Corona::availableScreenRectWithCriteria(int id, return available; } - bool allModes = modes.isEmpty(); - bool allEdges = edges.isEmpty(); + bool allModes = ignoreModes.isEmpty(); + bool allEdges = ignoreEdges.isEmpty(); QList views = layout->latteViews(); for (const auto *view : views) { if (view && view->containment() && view->screen() == screen - && ((allEdges || edges.contains(view->location())) - && (allModes || (view->visibility() && modes.contains(view->visibility()->mode()))))) { + && ((allEdges || !ignoreEdges.contains(view->location())) + && (allModes || (view->visibility() && !ignoreModes.contains(view->visibility()->mode()))))) { // Usually availableScreenRect is used by the desktop, // but Latte don't have desktop, then here just diff --git a/app/lattecorona.h b/app/lattecorona.h index f62fb08b5..55bbb6add 100644 --- a/app/lattecorona.h +++ b/app/lattecorona.h @@ -113,14 +113,14 @@ public: //! external panels should be considered in the calculations QRect availableScreenRectWithCriteria(int id, QString forLayout = QString(), - QList modes = QList(), - QList edges = QList(), + QList ignoreModes = QList(), + QList ignoreEdges = QList(), bool includeExternalPanels = false) const; QRegion availableScreenRegionWithCriteria(int id, QString forLayout = QString(), - QList modes = QList(), - QList edges = QList(), + QList ignoreModes = QList(), + QList ignoreEdges = QList(), bool includeExternalPanels = false) const; int screenForContainment(const Plasma::Containment *containment) const override; diff --git a/app/plasma/extended/screengeometries.cpp b/app/plasma/extended/screengeometries.cpp index f76987a6d..6a696bd9e 100644 --- a/app/plasma/extended/screengeometries.cpp +++ b/app/plasma/extended/screengeometries.cpp @@ -116,12 +116,12 @@ void ScreenGeometries::updateGeometries() if (m_corona->screenPool()->hasId(scrId)) { QRect availableRect = m_corona->availableScreenRectWithCriteria(scrId, QString(), - m_acceptedModes, + m_ignoreModes, QList()); QRegion availableRegion = m_corona->availableScreenRegionWithCriteria(scrId, QString(), - m_acceptedModes, + m_ignoreModes, QList()); if (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect) { diff --git a/app/plasma/extended/screengeometries.h b/app/plasma/extended/screengeometries.h index 5febb2c7b..348492eae 100644 --- a/app/plasma/extended/screengeometries.h +++ b/app/plasma/extended/screengeometries.h @@ -63,13 +63,10 @@ private: Latte::Corona *m_corona{nullptr}; - QList m_acceptedModes{Latte::Types::AlwaysVisible, - Latte::Types::DodgeActive, - Latte::Types::DodgeMaximized, - Latte::Types::DodgeAllWindows, - Latte::Types::WindowsGoBelow, - Latte::Types::WindowsCanCover, - Latte::Types::WindowsAlwaysCover}; + QList m_ignoreModes{ + Latte::Types::AutoHide, + Latte::Types::SideBar + }; QStringList m_lastScreenNames; diff --git a/app/view/positioner.cpp b/app/view/positioner.cpp index 63093f50e..897b9d0f7 100644 --- a/app/view/positioner.cpp +++ b/app/view/positioner.cpp @@ -415,30 +415,27 @@ void Positioner::syncGeometry() auto latteCorona = qobject_cast(m_view->corona()); int fixedScreen = m_view->onPrimary() ? latteCorona->screenPool()->primaryScreenId() : m_view->containment()->screen(); - QList modes({Latte::Types::AlwaysVisible, - Latte::Types::DodgeActive, - Latte::Types::DodgeMaximized, - Latte::Types::DodgeAllWindows, - Latte::Types::WindowsGoBelow, - Latte::Types::WindowsCanCover, - Latte::Types::WindowsAlwaysCover}); + QList ignoreModes({Latte::Types::AutoHide, + Latte::Types::SideBar}); - QList edges; + QList ignoreEdges({Plasma::Types::LeftEdge, + Plasma::Types::RightEdge}); if (m_isStickedOnTopEdge && m_isStickedOnBottomEdge) { //! dont send an empty edges array because that means include all screen edges in calculations - edges << Plasma::Types::Floating; + ignoreEdges << Plasma::Types::TopEdge; + ignoreEdges << Plasma::Types::BottomEdge; } else { - if (!m_isStickedOnTopEdge) { - edges << Plasma::Types::TopEdge; + if (m_isStickedOnTopEdge) { + ignoreEdges << Plasma::Types::TopEdge; } - if (!m_isStickedOnBottomEdge) { - edges << Plasma::Types::BottomEdge; + if (m_isStickedOnBottomEdge) { + ignoreEdges << Plasma::Types::BottomEdge; } } - freeRegion = latteCorona->availableScreenRegionWithCriteria(fixedScreen, layoutName, modes, edges); + freeRegion = latteCorona->availableScreenRegionWithCriteria(fixedScreen, layoutName, ignoreModes, ignoreEdges); maximumRect = maximumNormalGeometry(); QRegion availableRegion = freeRegion.intersected(maximumRect); diff --git a/app/wm/tracker/windowstracker.cpp b/app/wm/tracker/windowstracker.cpp index 6c2671a44..bbf3de275 100644 --- a/app/wm/tracker/windowstracker.cpp +++ b/app/wm/tracker/windowstracker.cpp @@ -753,7 +753,7 @@ void Windows::updateAvailableScreenGeometries() for (const auto view : m_views.keys()) { if (m_views[view]->enabled()) { int currentScrId = view->positioner()->currentScreenId(); - QRect tempAvailableScreenGeometry = m_wm->corona()->availableScreenRectWithCriteria(currentScrId, QString(), {Types::AlwaysVisible}, {}); + QRect tempAvailableScreenGeometry = m_wm->corona()->availableScreenRectWithCriteria(currentScrId, QString(), m_ignoreModes, {}); if (tempAvailableScreenGeometry != m_views[view]->availableScreenGeometry()) { m_views[view]->setAvailableScreenGeometry(tempAvailableScreenGeometry); diff --git a/app/wm/tracker/windowstracker.h b/app/wm/tracker/windowstracker.h index 8a72832a4..0c768cd52 100644 --- a/app/wm/tracker/windowstracker.h +++ b/app/wm/tracker/windowstracker.h @@ -22,6 +22,7 @@ // local #include "../windowinfowrap.h" +#include "../../../liblatte2/types.h" // Qt #include @@ -172,6 +173,18 @@ private: QHash m_views; QHash m_layouts; + //! Accept only ALWAYSVISIBLE visibility mode + QList m_ignoreModes{ + Latte::Types::AutoHide, + Latte::Types::DodgeActive, + Latte::Types::DodgeMaximized, + Latte::Types::DodgeAllWindows, + Latte::Types::WindowsGoBelow, + Latte::Types::WindowsCanCover, + Latte::Types::WindowsAlwaysCover, + Latte::Types::SideBar + }; + QMap m_windows; //! Some applications delay their application name/icon identification