diff --git a/frame/dbus/dbusdisplay.h b/frame/dbus/dbusdisplay.h index 0929e879c..d9f8e75af 100644 --- a/frame/dbus/dbusdisplay.h +++ b/frame/dbus/dbusdisplay.h @@ -116,8 +116,8 @@ public: const qreal scale = qApp->devicePixelRatio(); DisplayRect dr = primaryRawRect(); - dr.width = qreal(dr.width) / scale; - dr.height = qreal(dr.height) / scale; + dr.width = std::round(qreal(dr.width) / scale); + dr.height = std::round(qreal(dr.height) / scale); return dr; } diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 4938547b1..3c0b1a2d5 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -436,8 +436,8 @@ void DockSettings::calculateWindowConfig() { // qDebug() << Q_FUNC_INFO; const auto ratio = qApp->devicePixelRatio(); - const int defaultHeight = AppItem::itemBaseHeight() / ratio; - const int defaultWidth = AppItem::itemBaseWidth() / ratio; + const int defaultHeight = std::round(AppItem::itemBaseHeight() / ratio); + const int defaultWidth = std::round(AppItem::itemBaseWidth() / ratio); if (m_displayMode == Dock::Efficient) { diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 8f4a0eb67..e5ea3dd51 100644 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -427,8 +427,9 @@ void MainWindow::setStrutPartial() const int maxScreenHeight = m_settings->screenRawHeight(); const int maxScreenWidth = m_settings->screenRawWidth(); const Position side = m_settings->position(); - const QPoint p = rawXPosition(m_posChangeAni->endValue().toPoint()); - const QSize s = m_settings->windowSize(); + const QPoint &p = rawXPosition(m_posChangeAni->endValue().toPoint()); + const QSize &s = m_settings->windowSize(); + const QRect &primaryRawRect = m_settings->primaryRawRect(); XcbMisc::Orientation orientation = XcbMisc::OrientationTop; uint strut = 0; @@ -442,7 +443,7 @@ void MainWindow::setStrutPartial() orientation = XcbMisc::OrientationTop; strut = p.y() + s.height() * ratio; strutStart = p.x(); - strutEnd = p.x() + s.width() * ratio; + strutEnd = qMin(qRound(p.x() + s.width() * ratio), primaryRawRect.right()); strutArea.setLeft(strutStart); strutArea.setRight(strutEnd); strutArea.setBottom(strut); @@ -451,7 +452,7 @@ void MainWindow::setStrutPartial() orientation = XcbMisc::OrientationBottom; strut = maxScreenHeight - p.y(); strutStart = p.x(); - strutEnd = p.x() + s.width() * ratio; + strutEnd = qMin(qRound(p.x() + s.width() * ratio), primaryRawRect.right()); strutArea.setLeft(strutStart); strutArea.setRight(strutEnd); strutArea.setTop(p.y()); @@ -460,7 +461,7 @@ void MainWindow::setStrutPartial() orientation = XcbMisc::OrientationLeft; strut = p.x() + s.width() * ratio; strutStart = p.y(); - strutEnd = p.y() + s.height() * ratio; + strutEnd = qMin(qRound(p.y() + s.height() * ratio), primaryRawRect.bottom()); strutArea.setTop(strutStart); strutArea.setBottom(strutEnd); strutArea.setRight(strut); @@ -469,7 +470,7 @@ void MainWindow::setStrutPartial() orientation = XcbMisc::OrientationRight; strut = maxScreenWidth - p.x(); strutStart = p.y(); - strutEnd = p.y() + s.height() * ratio; + strutEnd = qMin(qRound(p.y() + s.height() * ratio), primaryRawRect.bottom()); strutArea.setTop(strutStart); strutArea.setBottom(strutEnd); strutArea.setLeft(p.x()); @@ -493,7 +494,11 @@ void MainWindow::setStrutPartial() ++count; } if (count > 0) + { + qWarning() << "strutArea is intersects with another screen."; + qWarning() << maxScreenHeight << maxScreenWidth << side << p << s; return; + } m_xcbMisc->set_strut_partial(winId(), orientation, strut, strutStart, strutEnd); }