From 396bc0c1721af8d3ee970228e7df457f6b2c73d5 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Mon, 13 Apr 2020 15:44:09 +0300 Subject: Rewrite Session backend Add session.hpp, containing structs that describe session data MainWindow, SubWindow and WebView can be created from Session::structs Opening new window will automatically open a default subwindow and tab if none were specified Add lib/session_formats Add JsonSession, to serialize/deserialize Session structs into JSON - add some tests clang-tidy: - fix various warnings - disable modernize-use-trailing-return-type check --- src/browser.cpp | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) (limited to 'src/browser.cpp') diff --git a/src/browser.cpp b/src/browser.cpp index 02d5bc9..3c39ec7 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -218,22 +218,44 @@ void Browser::showWidget(QWidget *widget, MainWindow *where) const where->addDockWidget(Qt::RightDockWidgetArea, widget); } -MainWindow *Browser::createWindow() +void Browser::open(const QVector &data, bool merge) { - // the window will delete itself when it closes, so we don't need to delete it - auto *window = new MainWindow(); - connect(window->addressBar, &AddressBar::complete, m_bookmarks.get(), &BookmarksWidget::search); + if(data.count() == 0 && merge) { + m_windows.at(0)->createTab(QUrl()); + } + + if(data.count() == 1 && m_windows.count() >= 1 && merge) { + const auto windowData = data.at(0); + auto *window = m_windows.at(0); + + if(windowData.subwindows.count() == 1) { + const auto subwindowData = windowData.subwindows.at(0); + for(const auto &tab : subwindowData.tabs) { + window->createTab(tab); + } + } else { + for(const auto &data : windowData.subwindows) { + window->createSubWindow(data); + } + } - for(auto *info : qAsConst(m_plugins)) { - addPluginTo(info, window); + return; } - m_windows.append(window); - connect(window, &MainWindow::destroyed, this, [this, window]() { - m_windows.removeOne(window); - }); + for(const auto &windowData : data) { + // the window will delete itself when it closes, so we don't need to delete it + auto *window = new MainWindow(windowData); + connect(window->addressBar, &AddressBar::complete, m_bookmarks.get(), &BookmarksWidget::search); - return window; + for(auto *info : qAsConst(m_plugins)) { + addPluginTo(info, window); + } + + m_windows.append(window); + connect(window, &MainWindow::destroyed, this, [this, window]() { + m_windows.removeOne(window); + }); + } } void Browser::addPluginTo(PluginInfo *info, MainWindow *window) -- cgit v1.2.1