fix plasma available geometry broadcasting

--ignore docks and panels for availableScreenRect(s) etc.
when they are in startup and they are painted offscreen
--plasma is not ready to accept availableScreenRegion(s) because
after startup moves desktop widgets to the left even though
it should not
--fix availableScreenRegion calculations for Centered and Justified
docks and panels
pull/27/head
Michail Vourlakos 3 years ago
parent be84ba56f0
commit 3c21f5475e

@ -583,7 +583,9 @@ QRegion Corona::availableScreenRegionWithCriteria(int id,
bool allEdges = ignoreEdges.isEmpty(); bool allEdges = ignoreEdges.isEmpty();
for (const auto *view : views) { for (const auto *view : views) {
if (view && view->containment() && view->screen() == screen bool inDesktopOffScreenStartup = desktopUse && view && view->positioner() && view->positioner()->isOffScreen();
if (view && view->containment() && view->screen() == screen && !inDesktopOffScreenStartup
&& ((allEdges || !ignoreEdges.contains(view->location())) && ((allEdges || !ignoreEdges.contains(view->location()))
&& (view->visibility() && !ignoreModes.contains(view->visibility()->mode())))) { && (view->visibility() && !ignoreModes.contains(view->visibility()->mode())))) {
int realThickness = view->normalThickness(); int realThickness = view->normalThickness();
@ -606,7 +608,7 @@ QRegion Corona::availableScreenRegionWithCriteria(int id,
case Latte::Types::Center: case Latte::Types::Center:
case Latte::Types::Justify: case Latte::Types::Justify:
x = (view->geometry().center().x() - w/2) + offsetW; x = (view->geometry().center().x() - w/2) + 1 + offsetW;
break; break;
case Latte::Types::Right: case Latte::Types::Right:
@ -630,7 +632,7 @@ QRegion Corona::availableScreenRegionWithCriteria(int id,
case Latte::Types::Center: case Latte::Types::Center:
case Latte::Types::Justify: case Latte::Types::Justify:
y = (view->geometry().center().y() - h/2) + offsetH; y = (view->geometry().center().y() - h/2) + 1 + offsetH;
break; break;
case Latte::Types::Bottom: case Latte::Types::Bottom:
@ -785,7 +787,9 @@ QRect Corona::availableScreenRectWithCriteria(int id,
bool allEdges = ignoreEdges.isEmpty(); bool allEdges = ignoreEdges.isEmpty();
for (const auto *view : views) { for (const auto *view : views) {
if (view && view->containment() && view->screen() == screen bool inDesktopOffScreenStartup = desktopUse && view && view->positioner() && view->positioner()->isOffScreen();
if (view && view->containment() && view->screen() == screen && !inDesktopOffScreenStartup
&& ((allEdges || !ignoreEdges.contains(view->location())) && ((allEdges || !ignoreEdges.contains(view->location()))
&& (view->visibility() && !ignoreModes.contains(view->visibility()->mode())))) { && (view->visibility() && !ignoreModes.contains(view->visibility()->mode())))) {

@ -467,7 +467,6 @@ inline void filterDebugMessageOutput(QtMsgType type, const QMessageLogContext &c
TypeColor = CRED; TypeColor = CRED;
} else { } else {
TypeColor = CIGREEN; TypeColor = CIGREEN;
} }
qDebug().nospace() << TypeColor << "[" << typeStr.toStdString().c_str() << " : " << CGREEN << QTime::currentTime().toString("h:mm:ss.zz").toStdString().c_str() << TypeColor << "]" << CNORMAL qDebug().nospace() << TypeColor << "[" << typeStr.toStdString().c_str() << " : " << CGREEN << QTime::currentTime().toString("h:mm:ss.zz").toStdString().c_str() << TypeColor << "]" << CNORMAL

@ -171,7 +171,9 @@ void ScreenGeometries::clearGeometries()
if (m_corona->screenPool()->hasScreenId(scrId)) { if (m_corona->screenPool()->hasScreenId(scrId)) {
setPlasmaAvailableScreenRect(scrName, QRect()); setPlasmaAvailableScreenRect(scrName, QRect());
setPlasmaAvailableScreenRegion(scrName, QRegion());
/* Disabling until Plasma is ready and not making mistakes.
setPlasmaAvailableScreenRegion(scrName, QRegion());*/
} }
} }
@ -189,6 +191,8 @@ void ScreenGeometries::updateGeometries()
qDebug() << " PLASMA SCREEN GEOMETRIES, LAST AVAILABLE SCREEN RECTS :: " << m_lastAvailableRect; qDebug() << " PLASMA SCREEN GEOMETRIES, LAST AVAILABLE SCREEN RECTS :: " << m_lastAvailableRect;
QStringList clearedScreenNames;
//! check for available geometries changes //! check for available geometries changes
for (QScreen *screen : qGuiApp->screens()) { for (QScreen *screen : qGuiApp->screens()) {
QString scrName = screen->name(); QString scrName = screen->name();
@ -204,24 +208,38 @@ void ScreenGeometries::updateGeometries()
true, true,
true); true);
/* Disabling until Plasma is ready and not making mistakes.
* The biggest issue is that after startup when setting Plasma Available Region the right aligned desktop
* widgets are moved to the left. This needs investigation to Plasma code to check out what is happening
QRegion availableRegion = m_corona->availableScreenRegionWithCriteria(scrId, QRegion availableRegion = m_corona->availableScreenRegionWithCriteria(scrId,
QString(), QString(),
m_ignoreModes, m_ignoreModes,
QList<Plasma::Types::Location>(), QList<Plasma::Types::Location>(),
true, true,
true); true);
*/
//! Disable checks because of the workaround concerning plasma desktop behavior
if (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect) { bool clearedScreen = (availableRect == screen->geometry());
m_lastAvailableRect[scrName] = availableRect;
setPlasmaAvailableScreenRect(scrName, availableRect); if (!clearedScreen) {
qDebug() << " PLASMA SCREEN GEOMETRIES, AVAILABLE RECT :: " << screen->name() << " : " << availableRect; //! Disable checks because of the workaround concerning plasma desktop behavior
} if (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect) {
m_lastAvailableRect[scrName] = availableRect;
if (!m_lastAvailableRegion.contains(scrName) || m_lastAvailableRegion[scrName] != availableRegion) { setPlasmaAvailableScreenRect(scrName, availableRect);
m_lastAvailableRegion[scrName] = availableRegion; qDebug() << " PLASMA SCREEN GEOMETRIES, AVAILABLE RECT :: " << screen->name() << " : " << availableRect;
setPlasmaAvailableScreenRegion(scrName, availableRegion); }
qDebug() << " PLASMA SCREEN GEOMETRIES, AVAILABLE REGION :: " << screen->name() << " : " << availableRegion;
/* Disabling until Plasma is ready and not making mistakes.
* The biggest issue is that after startup when setting Plasma Available Region the right aligned desktop
* widgets are moved to the left. This needs investigation to Plasma code to check out what is happening
if (!m_lastAvailableRegion.contains(scrName) || m_lastAvailableRegion[scrName] != availableRegion) {
m_lastAvailableRegion[scrName] = availableRegion;
setPlasmaAvailableScreenRegion(scrName, availableRegion);
qDebug() << " PLASMA SCREEN GEOMETRIES, AVAILABLE REGION :: " << screen->name() << " : " << availableRegion;
}*/
} else {
clearedScreenNames << scrName;
} }
} }
@ -230,10 +248,12 @@ void ScreenGeometries::updateGeometries()
//! check for inactive screens that were published previously //! check for inactive screens that were published previously
for (QString &lastScrName : m_lastScreenNames) { for (QString &lastScrName : m_lastScreenNames) {
if (!screenIsActive(lastScrName)) { if (!screenIsActive(lastScrName) || clearedScreenNames.contains(lastScrName)) {
//! screen became inactive and its geometries could be unpublished //! screen became inactive and its geometries could be unpublished
setPlasmaAvailableScreenRect(lastScrName, QRect()); setPlasmaAvailableScreenRect(lastScrName, QRect());
setPlasmaAvailableScreenRegion(lastScrName, QRegion());
/* Disabling until Plasma is ready and not making mistakes.
setPlasmaAvailableScreenRegion(lastScrName, QRegion());*/
m_lastAvailableRect.remove(lastScrName); m_lastAvailableRect.remove(lastScrName);
m_lastAvailableRegion.remove(lastScrName); m_lastAvailableRegion.remove(lastScrName);

@ -268,7 +268,7 @@ void Positioner::setInRelocationShowing(bool active)
bool Positioner::isOffScreen() const bool Positioner::isOffScreen() const
{ {
return (m_validGeometry.x()<-500 || m_validGeometry.y()<-500); return (m_view->absoluteGeometry().x()<-500 || m_view->absoluteGeometry().y()<-500);
} }
int Positioner::currentScreenId() const int Positioner::currentScreenId() const

Loading…
Cancel
Save