1
0
mirror of https://github.com/KDE/latte-dock.git synced 2025-02-02 21:47:22 +03:00

fix vertical docks/panels positioning

--identify correctly for vertical panels in right edge
when they need to draw or not their top and bottom borders.
This is enough in order to position properly these docks.

BUG:448519
FIXED-IN:0.10.8
This commit is contained in:
Michail Vourlakos 2022-01-16 02:27:40 +02:00
parent ec62b36018
commit 6fa1d1cc87
3 changed files with 15 additions and 4 deletions

View File

@ -612,7 +612,7 @@ QRegion Corona::availableScreenRegionWithCriteria(int id,
break;
case Latte::Types::Right:
x = view->geometry().right() - w - offsetW;
x = view->geometry().right() + 1 - w - offsetW;
break;
}
}

View File

@ -587,7 +587,6 @@ void Positioner::immediateSyncGeometry()
}
validateTopBottomBorders(availableScreenRect, freeRegion);
m_lastAvailableScreenRegion = freeRegion;
} else {
m_view->effects()->setForceTopBorder(false);
@ -674,7 +673,8 @@ void Positioner::validateTopBottomBorders(QRect availableScreenRect, QRegion ava
if (availableScreenRect.top() != m_view->screenGeometry().top()) {
//! check top border
QRegion fitInRegion = QRect(m_view->screenGeometry().x(), availableScreenRect.y()-1, edgeMargin, 1);
int x = m_view->location() == Plasma::Types::LeftEdge ? m_view->screenGeometry().x() : m_view->screenGeometry().right();
QRegion fitInRegion = QRect(x, availableScreenRect.y()-1, edgeMargin, 1);
QRegion subtracted = fitInRegion.subtracted(availableScreenRegion);
if (subtracted.isNull()) {
@ -690,7 +690,8 @@ void Positioner::validateTopBottomBorders(QRect availableScreenRect, QRegion ava
if (availableScreenRect.bottom() != m_view->screenGeometry().bottom()) {
//! check top border
QRegion fitInRegion = QRect(m_view->screenGeometry().x(), availableScreenRect.bottom()+1, edgeMargin, 1);
int x = m_view->location() == Plasma::Types::LeftEdge ? m_view->screenGeometry().x() : m_view->screenGeometry().right();
QRegion fitInRegion = QRect(x, availableScreenRect.bottom()+1, edgeMargin, 1);
QRegion subtracted = fitInRegion.subtracted(availableScreenRegion);
if (subtracted.isNull()) {

View File

@ -301,6 +301,16 @@ void View::init(Plasma::Containment *plasma_containment)
connect(this, &View::activitiesChanged, this, &View::applyActivitiesToWindows);
connect(m_positioner, &ViewPart::Positioner::winIdChanged, this, &View::applyActivitiesToWindows);
connect(this, &View::alignmentChanged, this, [&](){
// inform neighbour vertical docks/panels to adjust their positioning
if (m_inDelete || formFactor() == Plasma::Types::Vertical) {
return;
}
emit availableScreenRectChangedFrom(this);
emit availableScreenRegionChangedFrom(this);
});
connect(this, &View::maxLengthChanged, this, [&]() {
if (m_inDelete) {
return;