1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 18:56:34 +01:00

Always open new window when restoring session after crash

Also remove special handling for qupzilla:restore tabs.
This commit is contained in:
David Rosca 2018-01-04 16:50:45 +01:00
parent 679268dbd1
commit 5cc41d219e
7 changed files with 23 additions and 42 deletions

View File

@ -449,11 +449,10 @@ void MainApplication::openSession(BrowserWindow* window, RestoreData &restoreDat
bool MainApplication::restoreSession(BrowserWindow* window, RestoreData restoreData) bool MainApplication::restoreSession(BrowserWindow* window, RestoreData restoreData)
{ {
if (!window || m_isPrivate || !restoreData.isValid()) { if (m_isPrivate || !restoreData.isValid()) {
return false; return false;
} }
window->tabWidget()->closeRecoveryTab();
openSession(window, restoreData); openSession(window, restoreData);
m_restoreManager->clearRestoreData(); m_restoreManager->clearRestoreData();

View File

@ -23,6 +23,7 @@
#include "browserwindow.h" #include "browserwindow.h"
#include "qztools.h" #include "qztools.h"
#include "iconprovider.h" #include "iconprovider.h"
#include "tabwidget.h"
#include <QJsonObject> #include <QJsonObject>
@ -72,11 +73,7 @@ QJsonArray RecoveryJsObject::restoreData() const
void RecoveryJsObject::startNewSession() void RecoveryJsObject::startNewSession()
{ {
BrowserWindow *window = getBrowserWindow(); closeTab();
if (!window)
return;
m_page->load(window->homepageUrl());
mApp->restoreManager()->clearRestoreData(); mApp->restoreManager()->clearRestoreData();
mApp->destroyRestoreManager(); mApp->destroyRestoreManager();
@ -112,16 +109,23 @@ void RecoveryJsObject::restoreSession(const QStringList &excludeWin, const QStri
wd.currentTab = wd.tabs.size() - 1; wd.currentTab = wd.tabs.size() - 1;
} }
BrowserWindow *window = getBrowserWindow(); if (mApp->restoreSession(nullptr, data)) {
if (!window) closeTab();
return; } else {
if (!mApp->restoreSession(window, data))
startNewSession(); startNewSession();
} }
}
BrowserWindow *RecoveryJsObject::getBrowserWindow() const void RecoveryJsObject::closeTab()
{ {
TabbedWebView *view = qobject_cast<TabbedWebView*>(m_page->view()); TabbedWebView *view = qobject_cast<TabbedWebView*>(m_page->view());
return view ? view->browserWindow() : Q_NULLPTR; if (!view) {
return;
}
if (view->browserWindow()->tabWidget()->count() > 1) {
view->closeView();
} else {
view->browserWindow()->close();
}
} }

View File

@ -1,6 +1,6 @@
/* ============================================================ /* ============================================================
* Falkon - Qt web browser * Falkon - Qt web browser
* Copyright (C) 2015 David Rosca <nowrep@gmail.com> * Copyright (C) 2015-2018 David Rosca <nowrep@gmail.com>
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -43,7 +43,7 @@ public slots:
void restoreSession(const QStringList &excludeWin, const QStringList &excludeTab); void restoreSession(const QStringList &excludeWin, const QStringList &excludeTab);
private: private:
BrowserWindow *getBrowserWindow() const; void closeTab();
RestoreManager *m_manager; RestoreManager *m_manager;
WebPage *m_page; WebPage *m_page;

View File

@ -346,7 +346,7 @@ int TabWidget::addView(const LoadRequest &req, const QString &title, const Qz::N
m_lastBackgroundTabIndex = index; m_lastBackgroundTabIndex = index;
} }
connect(webTab->webView(), SIGNAL(wantsCloseTab(int)), this, SLOT(closeTab(int))); connect(webTab->webView(), SIGNAL(wantsCloseTab(int)), this, SLOT(requestCloseTab(int)));
connect(webTab->webView(), SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed())); connect(webTab->webView(), SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed()));
connect(webTab->webView(), SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString))); connect(webTab->webView(), SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString)));
connect(webTab->webView(), &WebView::urlChanged, this, [this](const QUrl &url) { connect(webTab->webView(), &WebView::urlChanged, this, [this](const QUrl &url) {
@ -393,7 +393,7 @@ int TabWidget::insertView(int index, WebTab *tab, const Qz::NewTabPositionFlags
m_lastBackgroundTabIndex = index; m_lastBackgroundTabIndex = index;
} }
connect(tab->webView(), SIGNAL(wantsCloseTab(int)), this, SLOT(closeTab(int))); connect(tab->webView(), SIGNAL(wantsCloseTab(int)), this, SLOT(requestCloseTab(int)));
connect(tab->webView(), SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed())); connect(tab->webView(), SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed()));
connect(tab->webView(), SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString))); connect(tab->webView(), SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString)));
@ -429,7 +429,7 @@ void TabWidget::closeTab(int index)
TabbedWebView *webView = webTab->webView(); TabbedWebView *webView = webTab->webView();
m_locationBars->removeWidget(webView->webTab()->locationBar()); m_locationBars->removeWidget(webView->webTab()->locationBar());
disconnect(webView, SIGNAL(wantsCloseTab(int)), this, SLOT(closeTab(int))); disconnect(webView, SIGNAL(wantsCloseTab(int)), this, SLOT(requestCloseTab(int)));
disconnect(webView, SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed())); disconnect(webView, SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed()));
disconnect(webView, SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString))); disconnect(webView, SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString)));
@ -454,10 +454,6 @@ void TabWidget::requestCloseTab(int index)
TabbedWebView *webView = webTab->webView(); TabbedWebView *webView = webTab->webView();
// Don't close restore page!
if (webView->url().toString() == QL1S("falkon:restore") && mApp->restoreManager())
return;
// This would close last tab, so we close the window instead // This would close last tab, so we close the window instead
if (count() <= 1) { if (count() <= 1) {
// If we are not closing window upon closing last tab, let's just load new-tab-url // If we are not closing window upon closing last tab, let's just load new-tab-url
@ -638,7 +634,7 @@ void TabWidget::detachTab(WebTab* tab)
Q_ASSERT(tab); Q_ASSERT(tab);
m_locationBars->removeWidget(tab->locationBar()); m_locationBars->removeWidget(tab->locationBar());
disconnect(tab->webView(), SIGNAL(wantsCloseTab(int)), this, SLOT(closeTab(int))); disconnect(tab->webView(), SIGNAL(wantsCloseTab(int)), this, SLOT(requestCloseTab(int)));
disconnect(tab->webView(), SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed())); disconnect(tab->webView(), SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed()));
disconnect(tab->webView(), SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString))); disconnect(tab->webView(), SIGNAL(ipChanged(QString)), m_window->ipLabel(), SLOT(setText(QString)));
@ -781,15 +777,6 @@ bool TabWidget::restoreState(const QVector<WebTab::SavedTab> &tabs, int currentT
return true; return true;
} }
void TabWidget::closeRecoveryTab()
{
foreach (WebTab* tab, allTabs(false)) {
if (tab->url().toString() == QLatin1String("falkon:restore")) {
closeTab(tab->tabIndex());
}
}
}
TabWidget::~TabWidget() TabWidget::~TabWidget()
{ {
delete m_closedTabsManager; delete m_closedTabsManager;

View File

@ -70,7 +70,6 @@ public:
~TabWidget(); ~TabWidget();
bool restoreState(const QVector<WebTab::SavedTab> &tabs, int currentTab); bool restoreState(const QVector<WebTab::SavedTab> &tabs, int currentTab);
void closeRecoveryTab();
void setCurrentIndex(int index); void setCurrentIndex(int index);

View File

@ -36,11 +36,6 @@ void ClosedTabsManager::saveTab(WebTab *tab)
return; return;
} }
// Don't save restore tab
if (tab->url().toString() == QL1S("qupzilla:restore")) {
return;
}
Tab closedTab; Tab closedTab;
closedTab.position = tab->tabIndex(); closedTab.position = tab->tabIndex();
closedTab.tabState = WebTab::SavedTab(tab); closedTab.tabState = WebTab::SavedTab(tab);

View File

@ -473,9 +473,6 @@ void TabManagerWidget::processActions()
} }
if (command == "closeSelection") { if (command == "closeSelection") {
if (webTab->url().toString() == "falkon:restore") {
continue;
}
selectedTabs.insertMulti(mainWindow, webTab); selectedTabs.insertMulti(mainWindow, webTab);
} }
else if (command == "detachSelection" || command == "bookmarkSelection") { else if (command == "detachSelection" || command == "bookmarkSelection") {