diff options
Diffstat (limited to 'src/browser.cpp')
-rw-r--r-- | src/browser.cpp | 44 |
1 files changed, 33 insertions, 11 deletions
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<Session::MainWindow> &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) |