diff --git a/examples/basic/main.cpp b/examples/basic/main.cpp index 23a45331..99e35d44 100644 --- a/examples/basic/main.cpp +++ b/examples/basic/main.cpp @@ -72,7 +72,7 @@ public: // newAction = fileMenu->addAction("Change MainWindow indicator style"); - /*auto saveLayoutAction = fileMenu->addAction(QStringLiteral("Save Layout")); + auto saveLayoutAction = fileMenu->addAction(QStringLiteral("Save Layout")); connect(saveLayoutAction, &QAction::triggered, this, [] { LayoutSaver saver; const bool result = saver.saveToDisk(); @@ -83,7 +83,7 @@ public: connect(restoreLayoutAction, &QAction::triggered, this, [] { LayoutSaver saver; saver.restoreFromDisk(); - });*/ + }); } bool eventFilter(QObject *o, QEvent *ev) override diff --git a/src/LayoutSaver.cpp b/src/LayoutSaver.cpp index 0b91892b..3fad830a 100644 --- a/src/LayoutSaver.cpp +++ b/src/LayoutSaver.cpp @@ -85,12 +85,14 @@ bool LayoutSaver::saveToDisk() return true; } -void LayoutSaver::restoreFromDisk() +bool LayoutSaver::restoreFromDisk() { const QByteArray data = d->settings()->value(QStringLiteral("data")).toByteArray(); Private::s_restoreInProgress = true; - restoreLayout(data); + const bool result = restoreLayout(data); Private::s_restoreInProgress = false; + + return result; } QByteArray LayoutSaver::serializeLayout() const diff --git a/src/LayoutSaver.h b/src/LayoutSaver.h index 56c0ab5c..e34d2997 100644 --- a/src/LayoutSaver.h +++ b/src/LayoutSaver.h @@ -43,17 +43,32 @@ public: ///@brief returns whether a restore (@ref restoreLayout) is in progress static bool restoreInProgress(); -private: - - // Private for now, as they don't work + /** + * @brief saves the layout to disk using QSettings + */ bool saveToDisk(); - void restoreFromDisk(); - friend class TestDocks; + /** + * @brief restores the layout from disk using QSettings. + * @return true on success + */ + bool restoreFromDisk(); + /** + * @brief saves the layout into a bytearray + */ QByteArray serializeLayout() const; + + /** + * @brief restores the layout from a bytearray + * It's mandatory that all MainWindows and DockWidgets have been created before calling this function. + * @return true on success + */ bool restoreLayout(const QByteArray &); +private: + friend class TestDocks; + class Private; Private *const d; }; diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index a5f42112..71499808 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -1371,7 +1371,7 @@ void TestDocks::tst_restoreSimple() QCOMPARE(layout->placeholderCount(), 1); QCOMPARE(DockRegistry::self()->nestedwindows().size(), 0); - saver.restoreFromDisk(); + QVERIFY(saver.restoreFromDisk()); QCOMPARE(layout->count(), 1); QCOMPARE(layout->placeholderCount(), 0); QVERIFY(dock1->isVisible()); @@ -1446,7 +1446,7 @@ void TestDocks::tst_restoreNestedAndTabbed() auto dock5 = createDockWidget(QStringLiteral("5"), new QTextEdit()); LayoutSaver saver; - saver.restoreFromDisk(); + QVERIFY(saver.restoreFromDisk()); QVERIFY(layout->checkSanity()); auto fw4 = qobject_cast(dock4->window()); @@ -1487,7 +1487,7 @@ void TestDocks::tst_restoreCrash() QVERIFY(layout->checkSanity()); LayoutSaver saver; - saver.restoreFromDisk(); + QVERIFY(saver.restoreFromDisk()); QVERIFY(layout->checkSanity()); QVERIFY(!dock1->isFloating()); } diff --git a/tests/utils.cpp b/tests/utils.cpp index 14e187c4..4b18d061 100644 --- a/tests/utils.cpp +++ b/tests/utils.cpp @@ -54,7 +54,7 @@ std::unique_ptr KDDockWidgets::Tests::createMainWindo const QString mainWindowName = name.isEmpty() ? QStringLiteral("MyMainWindow%1").arg(count) : name; - auto ptr = std::unique_ptr(new MainWindow(name, options)); + auto ptr = std::unique_ptr(new MainWindow(mainWindowName, options)); ptr->show(); ptr->resize(sz); return ptr;