update availableScree...WithCriteria functions

--use ignoredModes/Edges instead of accepted ones in order
to make code more readable and easy to understand
pull/11/head
Michail Vourlakos 5 years ago
parent f31cc660b4
commit 719c852c8c

@ -530,8 +530,8 @@ QRegion Corona::availableScreenRegion(int id) const
QRegion Corona::availableScreenRegionWithCriteria(int id,
QString forLayout,
QList<Types::Visibility> modes,
QList<Plasma::Types::Location> edges,
QList<Types::Visibility> ignoreModes,
QList<Plasma::Types::Location> 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<Latte::View *> 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<Types::Visibility> modes,
QList<Plasma::Types::Location> edges,
QList<Types::Visibility> ignoreModes,
QList<Plasma::Types::Location> 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<Latte::View *> 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

@ -113,14 +113,14 @@ public:
//! external panels should be considered in the calculations
QRect availableScreenRectWithCriteria(int id,
QString forLayout = QString(),
QList<Types::Visibility> modes = QList<Types::Visibility>(),
QList<Plasma::Types::Location> edges = QList<Plasma::Types::Location>(),
QList<Types::Visibility> ignoreModes = QList<Types::Visibility>(),
QList<Plasma::Types::Location> ignoreEdges = QList<Plasma::Types::Location>(),
bool includeExternalPanels = false) const;
QRegion availableScreenRegionWithCriteria(int id,
QString forLayout = QString(),
QList<Types::Visibility> modes = QList<Types::Visibility>(),
QList<Plasma::Types::Location> edges = QList<Plasma::Types::Location>(),
QList<Types::Visibility> ignoreModes = QList<Types::Visibility>(),
QList<Plasma::Types::Location> ignoreEdges = QList<Plasma::Types::Location>(),
bool includeExternalPanels = false) const;
int screenForContainment(const Plasma::Containment *containment) const override;

@ -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<Plasma::Types::Location>());
QRegion availableRegion = m_corona->availableScreenRegionWithCriteria(scrId,
QString(),
m_acceptedModes,
m_ignoreModes,
QList<Plasma::Types::Location>());
if (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect) {

@ -63,13 +63,10 @@ private:
Latte::Corona *m_corona{nullptr};
QList<Latte::Types::Visibility> m_acceptedModes{Latte::Types::AlwaysVisible,
Latte::Types::DodgeActive,
Latte::Types::DodgeMaximized,
Latte::Types::DodgeAllWindows,
Latte::Types::WindowsGoBelow,
Latte::Types::WindowsCanCover,
Latte::Types::WindowsAlwaysCover};
QList<Latte::Types::Visibility> m_ignoreModes{
Latte::Types::AutoHide,
Latte::Types::SideBar
};
QStringList m_lastScreenNames;

@ -415,30 +415,27 @@ void Positioner::syncGeometry()
auto latteCorona = qobject_cast<Latte::Corona *>(m_view->corona());
int fixedScreen = m_view->onPrimary() ? latteCorona->screenPool()->primaryScreenId() : m_view->containment()->screen();
QList<Types::Visibility> modes({Latte::Types::AlwaysVisible,
Latte::Types::DodgeActive,
Latte::Types::DodgeMaximized,
Latte::Types::DodgeAllWindows,
Latte::Types::WindowsGoBelow,
Latte::Types::WindowsCanCover,
Latte::Types::WindowsAlwaysCover});
QList<Types::Visibility> ignoreModes({Latte::Types::AutoHide,
Latte::Types::SideBar});
QList<Plasma::Types::Location> edges;
QList<Plasma::Types::Location> 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);

@ -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);

@ -22,6 +22,7 @@
// local
#include "../windowinfowrap.h"
#include "../../../liblatte2/types.h"
// Qt
#include <QObject>
@ -172,6 +173,18 @@ private:
QHash<Latte::View *, TrackedViewInfo *> m_views;
QHash<Latte::Layout::GenericLayout *, TrackedLayoutInfo *> m_layouts;
//! Accept only ALWAYSVISIBLE visibility mode
QList<Latte::Types::Visibility> 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<WindowId, WindowInfoWrap> m_windows;
//! Some applications delay their application name/icon identification

Loading…
Cancel
Save