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();
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()))
&& (view->visibility() && !ignoreModes.contains(view->visibility()->mode())))) {
int realThickness = view->normalThickness();
@ -606,7 +608,7 @@ QRegion Corona::availableScreenRegionWithCriteria(int id,
case Latte::Types::Center:
case Latte::Types::Justify:
x = (view->geometry().center().x() - w/2) + offsetW;
x = (view->geometry().center().x() - w/2) + 1 + offsetW;
break;
case Latte::Types::Right:
@ -630,7 +632,7 @@ QRegion Corona::availableScreenRegionWithCriteria(int id,
case Latte::Types::Center:
case Latte::Types::Justify:
y = (view->geometry().center().y() - h/2) + offsetH;
y = (view->geometry().center().y() - h/2) + 1 + offsetH;
break;
case Latte::Types::Bottom:
@ -785,7 +787,9 @@ QRect Corona::availableScreenRectWithCriteria(int id,
bool allEdges = ignoreEdges.isEmpty();
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()))
&& (view->visibility() && !ignoreModes.contains(view->visibility()->mode())))) {

@ -467,7 +467,6 @@ inline void filterDebugMessageOutput(QtMsgType type, const QMessageLogContext &c
TypeColor = CRED;
} else {
TypeColor = CIGREEN;
}
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)) {
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;
QStringList clearedScreenNames;
//! check for available geometries changes
for (QScreen *screen : qGuiApp->screens()) {
QString scrName = screen->name();
@ -204,13 +208,21 @@ void ScreenGeometries::updateGeometries()
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,
QString(),
m_ignoreModes,
QList<Plasma::Types::Location>(),
true,
true);
*/
bool clearedScreen = (availableRect == screen->geometry());
if (!clearedScreen) {
//! Disable checks because of the workaround concerning plasma desktop behavior
if (!m_lastAvailableRect.contains(scrName) || m_lastAvailableRect[scrName] != availableRect) {
m_lastAvailableRect[scrName] = availableRect;
@ -218,10 +230,16 @@ void ScreenGeometries::updateGeometries()
qDebug() << " PLASMA SCREEN GEOMETRIES, AVAILABLE RECT :: " << screen->name() << " : " << availableRect;
}
/* 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
for (QString &lastScrName : m_lastScreenNames) {
if (!screenIsActive(lastScrName)) {
if (!screenIsActive(lastScrName) || clearedScreenNames.contains(lastScrName)) {
//! screen became inactive and its geometries could be unpublished
setPlasmaAvailableScreenRect(lastScrName, QRect());
setPlasmaAvailableScreenRegion(lastScrName, QRegion());
/* Disabling until Plasma is ready and not making mistakes.
setPlasmaAvailableScreenRegion(lastScrName, QRegion());*/
m_lastAvailableRect.remove(lastScrName);
m_lastAvailableRegion.remove(lastScrName);

@ -268,7 +268,7 @@ void Positioner::setInRelocationShowing(bool active)
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

Loading…
Cancel
Save