diff --git a/Changelog b/Changelog index 514ee258..53b16f7d 100644 --- a/Changelog +++ b/Changelog @@ -7,7 +7,9 @@ sure to provide a sizeHint. * v1.3.1 (unreleased) - - Improve dragging across monitors with different dpi scaling + - Improve restoring layout when RestoreOption_RelativeToMainWindow is used (#171) + - Improved dragging windows across screens in mixed hdpi setups + - Fixed Flag_NativeTitleBar not hidding the client title bars when restoring (#170) * v1.3.0 (8 February 2021) - Experimental QtQuick support (#49) diff --git a/src/LayoutSaver.cpp b/src/LayoutSaver.cpp index dc4a3054..02a3276d 100644 --- a/src/LayoutSaver.cpp +++ b/src/LayoutSaver.cpp @@ -611,11 +611,6 @@ LayoutSaver::DockWidget::Ptr LayoutSaver::Frame::singleDockWidget() const return dockWidgets.first(); } -void LayoutSaver::Frame::scaleSizes(const ScalingInfo &scalingInfo) -{ - scalingInfo.applyFactorsTo(geometry); -} - QVariantMap LayoutSaver::Frame::toVariantMap() const { QVariantMap map; @@ -730,7 +725,6 @@ bool LayoutSaver::FloatingWindow::skipsRestore() const void LayoutSaver::FloatingWindow::scaleSizes(const ScalingInfo &scalingInfo) { scalingInfo.applyFactorsTo(/*by-ref*/geometry); - multiSplitterLayout.scaleSizes(scalingInfo); } QVariantMap LayoutSaver::FloatingWindow::toVariantMap() const @@ -788,9 +782,6 @@ void LayoutSaver::MainWindow::scaleSizes() } scalingInfo = ScalingInfo(uniqueName, geometry); - - if (scalingInfo.isValid()) - multiSplitterLayout.scaleSizes(scalingInfo); } QVariantMap LayoutSaver::MainWindow::toVariantMap() const @@ -875,13 +866,6 @@ bool LayoutSaver::MultiSplitter::skipsRestore() const }); } -void LayoutSaver::MultiSplitter::scaleSizes(const ScalingInfo &) -{ - // scalingInfo.applyFactorsTo(/*by-ref*/size); - //for (LayoutSaver::Item &item : items) TODO - // item.scaleSizes(scalingInfo); -} - QVariantMap LayoutSaver::MultiSplitter::toVariantMap() const { QVariantMap result; @@ -1011,8 +995,7 @@ void LayoutSaver::ScalingInfo::translatePos(QPoint &pt) const void LayoutSaver::ScalingInfo::applyFactorsTo(QPoint &pt) const { - pt.setX(qCeil(pt.x() * widthFactor)); - pt.setY(qCeil(pt.y() * heightFactor)); + translatePos(pt); } void LayoutSaver::ScalingInfo::applyFactorsTo(QSize &sz) const diff --git a/src/LayoutSaver_p.h b/src/LayoutSaver_p.h index 97bd80bb..13cb3529 100644 --- a/src/LayoutSaver_p.h +++ b/src/LayoutSaver_p.h @@ -184,9 +184,6 @@ struct LayoutSaver::Frame /// @brief in case this frame only has one frame, returns the name of that dock widget LayoutSaver::DockWidget::Ptr singleDockWidget() const; - /// Iterates through the layout and patches all absolute sizes. See RestoreOption_RelativeToMainWindow. - void scaleSizes(const ScalingInfo &scalingInfo); - QVariantMap toVariantMap() const; void fromVariantMap(const QVariantMap &map); @@ -208,9 +205,6 @@ struct LayoutSaver::MultiSplitter LayoutSaver::DockWidget::Ptr singleDockWidget() const; bool skipsRestore() const; - /// Iterates through the layout and patches all absolute sizes. See RestoreOption_RelativeToMainWindow. - void scaleSizes(const ScalingInfo &scalingInfo); - QVariantMap toVariantMap() const; void fromVariantMap(const QVariantMap &map); diff --git a/src/private/FloatingWindow.cpp b/src/private/FloatingWindow.cpp index 9b694811..67fcc753 100644 --- a/src/private/FloatingWindow.cpp +++ b/src/private/FloatingWindow.cpp @@ -345,6 +345,9 @@ void FloatingWindow::updateTitleBarVisibility() bool visible = true; + for (Frame *frame : frames()) + frame->updateTitleBarVisibility(); + if (KDDockWidgets::usesClientTitleBar()) { const auto flags = Config::self().flags(); if ((flags & Config::Flag_HideTitleBarWhenTabsVisible) && !(flags & Config::Flag_AlwaysTitleBarWhenFloating)) { @@ -353,9 +356,6 @@ void FloatingWindow::updateTitleBarVisibility() } } - for (Frame *frame : frames()) - frame->updateTitleBarVisibility(); - m_titleBar->updateButtons(); } else { visible = false; diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index dc271f88..3a8dd3a6 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -138,6 +138,7 @@ private Q_SLOTS: void tst_dontCloseDockWidgetBeforeRestore(); void tst_dontCloseDockWidgetBeforeRestore2(); void tst_dontCloseDockWidgetBeforeRestore3(); + void tst_restoreWithNativeTitleBar(); void tst_closeOnlyCurrentTab(); void tst_tabWidgetCurrentIndex(); @@ -7048,4 +7049,24 @@ void TestDocks::tst_redocksToPreviousTabIndex() #endif } +void TestDocks::tst_restoreWithNativeTitleBar() +{ + EnsureTopLevelsDeleted e; + KDDockWidgets::Config::self().setFlags(KDDockWidgets::Config::Flag_NativeTitleBar); + + auto dock0 = createDockWidget("dock0", new MyWidget2(QSize(400, 400))); + dock0->window()->move(100, 100); + + QVERIFY(!dock0->titleBar()->isVisible()); + QVERIFY(!dock0->floatingWindow()->titleBar()->isVisible()); + QVERIFY(!dock0->d->frame()->titleBar()->isVisible()); + + LayoutSaver saver; + const QByteArray saved = saver.serializeLayout(); + saver.restoreLayout(saved); + QVERIFY(!dock0->titleBar()->isVisible()); + QVERIFY(!dock0->floatingWindow()->titleBar()->isVisible()); + QVERIFY(!dock0->d->frame()->titleBar()->isVisible()); +} + #include "tst_docks.moc"