Index: kcm/src/declarative/qmlscreen.cpp =================================================================== --- kcm/src/declarative/qmlscreen.cpp +++ kcm/src/declarative/qmlscreen.cpp @@ -186,7 +186,7 @@ float QMLScreen::outputScale() const { - return 1.0 / 8.0; + return 1.0 / 12.0; } void QMLScreen::outputConnectedChanged() @@ -317,20 +317,11 @@ void QMLScreen::updateOutputsPlacement() { - int disabledOffsetX = width(); QSizeF activeScreenSize; Q_FOREACH (QQuickItem *item, childItems()) { QMLOutput *qmlOutput = qobject_cast(item); - if (!qmlOutput->output()->isConnected()) { - continue; - } - - if (!qmlOutput->output()->isEnabled()) { - qmlOutput->blockSignals(true); - disabledOffsetX -= qmlOutput->width(); - qmlOutput->setPosition(QPoint(disabledOffsetX, 0)); - qmlOutput->blockSignals(false); + if (!qmlOutput->output()->isConnected() || !qmlOutput->output()->isEnabled()) { continue; } @@ -347,6 +338,8 @@ const QPointF offset((width() - activeScreenSize.width()) / 2.0, (height() - activeScreenSize.height()) / 2.0); + qreal lastX = -1.0; + qreal lastY = -1.0; Q_FOREACH (QQuickItem *item, childItems()) { QMLOutput *qmlOutput = qobject_cast(item); if (!qmlOutput->output()->isConnected() || !qmlOutput->output()->isEnabled()) { @@ -356,8 +349,20 @@ qmlOutput->blockSignals(true); qmlOutput->setPosition(QPointF(offset.x() + (qmlOutput->outputX() * outputScale()), offset.y() + (qmlOutput->outputY() * outputScale()))); + lastX = qMax(lastX, qmlOutput->position().x() + qmlOutput->width()); + lastY = qMax(lastY, qmlOutput->position().y()); qmlOutput->blockSignals(false); } + + Q_FOREACH (QQuickItem *item, childItems()) { + QMLOutput *qmlOutput = qobject_cast(item); + if (qmlOutput->output()->isConnected() && !qmlOutput->output()->isEnabled()) { + qmlOutput->blockSignals(true); + qmlOutput->setPosition(QPointF(lastX, lastY)); + lastX += qmlOutput->width(); + qmlOutput->blockSignals(false); + } + } } void QMLScreen::setEngine(QQmlEngine* engine)