summaryrefslogtreecommitdiff
path: root/src/sessionmanager.cpp
diff options
context:
space:
mode:
authorDavid E. Narváez <david.narvaez@computer.org>2012-01-12 23:11:33 -0500
committerDavid E. Narváez <david.narvaez@computer.org>2012-01-12 23:11:33 -0500
commit7504b595fea9924a4a397cea3dc69fa2e0fd0119 (patch)
tree4de77dab52b76e49c392987645b0214256a2b47d /src/sessionmanager.cpp
parentrekonq 0.8.58 (diff)
downloadrekonq-7504b595fea9924a4a397cea3dc69fa2e0fd0119.tar.xz
Implement (User) Session Restore
This patch implements session management. Most of the ideas are taken from Konsole, which is also a KUniqueApplication but manages session restoring correctly. REVIEW: 103658
Diffstat (limited to 'src/sessionmanager.cpp')
-rw-r--r--src/sessionmanager.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp
index 20b35016..1bb96b54 100644
--- a/src/sessionmanager.cpp
+++ b/src/sessionmanager.cpp
@@ -78,6 +78,9 @@ void SessionManager::saveSession()
MainView *mv = w.data()->mainView();
QDomElement window = document.createElement("window");
int tabInserted = 0;
+
+ window.setAttribute("name", w.data()->objectName());
+
for (signed int tabNo = 0; tabNo < mv->count(); tabNo++)
{
// IGNORE about urls
@@ -278,6 +281,67 @@ int SessionManager::restoreSavedSession()
return winNo;
}
+bool SessionManager::restoreMainWindow(MainWindow* window)
+{
+ QFile sessionFile(m_sessionFilePath);
+ if (!sessionFile.exists())
+ {
+ kDebug() << "Unable to find session file" << sessionFile.fileName();
+ return 0;
+ }
+
+ if (!sessionFile.open(QFile::ReadOnly))
+ {
+ kDebug() << "Unable to open session file" << sessionFile.fileName();
+ return 0;
+ }
+
+ QDomDocument document("session");
+ if (!document.setContent(&sessionFile, false))
+ {
+ kDebug() << "Unable to parse session file" << sessionFile.fileName();
+ return 0;
+ }
+
+ unsigned int winNo;
+
+ for (winNo = 0; winNo < document.elementsByTagName("window").length(); winNo++)
+ {
+ QDomElement savedWindowElement = document.elementsByTagName("window").at(winNo).toElement();
+ int currentTab = 0;
+
+ if (window->objectName() != savedWindowElement.attribute("name", ""))
+ continue;
+
+ MainView *mv = window->mainView();
+
+ for (unsigned int tabNo = 0; tabNo < savedWindowElement.elementsByTagName("tab").length(); tabNo++)
+ {
+ QDomElement tab = savedWindowElement.elementsByTagName("tab").at(tabNo).toElement();
+ if (tab.hasAttribute("currentTab"))
+ currentTab = tabNo;
+
+ WebView *view = (tabNo == 0) ? mv->webTab(0)->view() : mv->newWebTab()->view();
+
+ QDomCDATASection historySection = tab.firstChild().toCDATASection();
+ QByteArray history = QByteArray::fromBase64(historySection.data().toAscii());
+
+ QDataStream readingStream(&history, QIODevice::ReadOnly);
+ readingStream >> *(view->history());
+
+ // Get sure about urls are loaded
+ KUrl u = KUrl(tab.attribute("url"));
+ if (u.protocol() == QL1S("about"))
+ view->load(u);
+ }
+
+ mv->tabBar()->setCurrentIndex(currentTab);
+
+ return true;
+ }
+
+ return false;
+}
QList<TabHistory> SessionManager::closedSites()
{