1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

ClosedWindowsManager: Save closed windows into session file

This commit is contained in:
David Rosca 2018-01-04 15:12:22 +01:00
parent 0b6c555c62
commit 3f60c554ee
5 changed files with 61 additions and 2 deletions

View File

@ -442,6 +442,8 @@ void MainApplication::openSession(BrowserWindow* window, RestoreData &restoreDat
window->restoreWindow(data); window->restoreWindow(data);
} }
m_closedWindowsManager->restoreState(restoreData.closedWindows);
restoreOverrideCursor(); restoreOverrideCursor();
} }
@ -741,6 +743,8 @@ QByteArray MainApplication::saveState() const
stream << m_restoreManager->restoreData(); stream << m_restoreManager->restoreData();
} }
restoreData.closedWindows = m_closedWindowsManager->saveState();
QByteArray data; QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly); QDataStream stream(&data, QIODevice::WriteOnly);

View File

@ -22,7 +22,7 @@
#include <QFile> #include <QFile>
static const int restoreDataVersion = 1; static const int restoreDataVersion = 2;
bool RestoreData::isValid() const bool RestoreData::isValid() const
{ {
@ -43,6 +43,7 @@ QDataStream &operator<<(QDataStream &stream, const RestoreData &data)
stream << restoreDataVersion; stream << restoreDataVersion;
stream << data.crashedSession; stream << data.crashedSession;
stream << data.closedWindows;
return stream; return stream;
} }
@ -66,6 +67,10 @@ QDataStream &operator>>(QDataStream &stream, RestoreData &data)
stream >> data.crashedSession; stream >> data.crashedSession;
} }
if (version >= 2) {
stream >> data.closedWindows;
}
return stream; return stream;
} }

View File

@ -29,6 +29,7 @@ struct QUPZILLA_EXPORT RestoreData
{ {
QVector<BrowserWindow::SavedWindow> windows; QVector<BrowserWindow::SavedWindow> windows;
QByteArray crashedSession; QByteArray crashedSession;
QByteArray closedWindows;
bool isValid() const; bool isValid() const;
void clear(); void clear();

View File

@ -39,7 +39,7 @@ QVector<ClosedWindowsManager::Window> ClosedWindowsManager::closedWindows() cons
void ClosedWindowsManager::saveWindow(BrowserWindow *window) void ClosedWindowsManager::saveWindow(BrowserWindow *window)
{ {
if (mApp->isPrivate() || !window->weView()) { if (mApp->isPrivate() || mApp->windowCount() == 1 || !window->weView()) {
return; return;
} }
@ -97,3 +97,49 @@ void ClosedWindowsManager::clearClosedWindows()
{ {
m_closedWindows.clear(); m_closedWindows.clear();
} }
static const int closedWindowsVersion = 1;
QByteArray ClosedWindowsManager::saveState() const
{
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << closedWindowsVersion;
stream << m_closedWindows.count();
for (const Window &window : qAsConst(m_closedWindows)) {
stream << window.windowState;
}
return data;
}
void ClosedWindowsManager::restoreState(const QByteArray &state)
{
QDataStream stream(state);
int version;
stream >> version;
if (version < 1) {
return;
}
m_closedWindows.clear();
int windowCount;
stream >> windowCount;
m_closedWindows.reserve(windowCount);
for (int i = 0; i < windowCount; ++i) {
Window window;
stream >> window.windowState;
if (!window.isValid()) {
continue;
}
window.icon = window.windowState.tabs.at(0).icon;
window.title = window.windowState.tabs.at(0).title;
m_closedWindows.append(window);
}
}

View File

@ -50,6 +50,9 @@ public:
// Takes window at given index // Takes window at given index
Window takeClosedWindowAt(int index); Window takeClosedWindowAt(int index);
QByteArray saveState() const;
void restoreState(const QByteArray &state);
public slots: public slots:
void restoreClosedWindow(); void restoreClosedWindow();
void restoreAllClosedWindows(); void restoreAllClosedWindows();