diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2009-09-26 00:03:00 +0200 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2009-09-26 00:03:00 +0200 |
commit | 64475d706faf1620cec8899da7165f4bc369d8a2 (patch) | |
tree | b57275e990201b2d59422fa6d79d5528830fb8d3 | |
parent | Fixing a bit thumbs tableWidget (diff) | |
download | rekonq-64475d706faf1620cec8899da7165f4bc369d8a2.tar.xz |
Fixing sessionmanager (at least I hope so):
- moved from DataStream to TextStream (we use strings..)
- implemented a semaphore (m_safe)
- closing every time file
-rw-r--r-- | src/application.cpp | 18 | ||||
-rw-r--r-- | src/mainview.cpp | 2 | ||||
-rw-r--r-- | src/sessionmanager.cpp | 33 | ||||
-rw-r--r-- | src/sessionmanager.h | 7 |
4 files changed, 35 insertions, 25 deletions
diff --git a/src/application.cpp b/src/application.cpp index ffde7203..683a405f 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -89,12 +89,16 @@ int Application::newInstance() KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); // is your app session restored? restore session... - if (isSessionRestored()) + // this mechanism also falls back to load usual plain rekonq + // if something goes wrong... + if (isSessionRestored() && sessionManager()->restoreSession()) { - sessionManager()->restoreSession(); + kDebug() << "session restored"; return 0; } - + +// -------------------------------------------------------------------------- + if (args->count() > 0) { // is there a window open on the current desktop ? use it! @@ -143,10 +147,6 @@ void Application::postLaunch() // set Icon Database Path to store "favicons" associated with web sites QString directory = KStandardDirs::locateLocal("cache" , "" , true); - if (directory.isEmpty()) - { - directory = QDir::homePath() + QLatin1String("/.") + QCoreApplication::applicationName(); - } QWebSettings::setIconDatabasePath(directory); Application::historyManager(); @@ -166,7 +166,6 @@ MainWindow *Application::mainWindow() { kDebug() << "No extant windows: creating one new..."; MainWindow *w = newMainWindow(); - QTimer::singleShot(0, this, SLOT(postLaunch())); return w; } @@ -401,7 +400,8 @@ MainWindow *Application::newMainWindow() m_mainWindows.prepend(w); w->show(); - + QTimer::singleShot(0, this, SLOT(postLaunch())); + return w; } diff --git a/src/mainview.cpp b/src/mainview.cpp index 61e340cb..5baf99ed 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -103,7 +103,7 @@ MainView::MainView(QWidget *parent) connect(m_tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(slotCloseTab(int))); // Session Manager - connect (this,SIGNAL(tabsChanged()),Application::sessionManager(),SLOT(saveSession())); + connect (this, SIGNAL(tabsChanged()), Application::sessionManager(), SLOT(saveSession())); } diff --git a/src/sessionmanager.cpp b/src/sessionmanager.cpp index 0c2c5c32..6b7d6b9e 100644 --- a/src/sessionmanager.cpp +++ b/src/sessionmanager.cpp @@ -41,11 +41,12 @@ // Qt Includes #include <QFile> -#include <QDataStream> +#include <QTextStream> SessionManager::SessionManager(QObject *parent) : QObject(parent) + , m_safe(true) { m_sessionFilePath = KStandardDirs::locateLocal("appdata" , "session"); } @@ -58,23 +59,28 @@ SessionManager::~SessionManager() void SessionManager::saveSession() { + if(!m_safe) + return; + m_safe = false; QFile sessionFile(m_sessionFilePath); if (!sessionFile.open(QFile::WriteOnly | QFile::Truncate)) { kWarning() << "Unable to open session file" << sessionFile.fileName(); return; } - QDataStream out(&sessionFile); + QTextStream out(&sessionFile); MainWindowList wl = Application::instance()->mainWindowList(); Q_FOREACH(QPointer<MainWindow> w, wl) { - out << QByteArray("window"); + out << "window\n"; MainView *mv = w->mainView(); for (int i = 0 ; i < mv->count() ; i++) { - out << mv->webView(i)->url().toEncoded(); + out << mv->webView(i)->url().toEncoded(QUrl::StripTrailingSlash) << "\n"; } } + sessionFile.close(); + m_safe = true; return; } @@ -90,22 +96,23 @@ bool SessionManager::restoreSession() return false; } - QDataStream in(&sessionFile); - int i = 0; - while (!sessionFile.atEnd()) + QTextStream in(&sessionFile); + QString line; + do { - ++i; - QByteArray data; - in >> data; - if(data == QByteArray("window")) + line = in.readLine(); + if(line == QString("window")) { Application::instance()->newMainWindow(); + line = in.readLine(); + Application::instance()->loadUrl(line); } else { - Application::instance()->loadUrl(data,Rekonq::NewCurrentTab); + Application::instance()->loadUrl(line, Rekonq::NewCurrentTab); } } - + while(!line.isNull()); + return true; } diff --git a/src/sessionmanager.h b/src/sessionmanager.h index 1ff8fa53..b66415e5 100644 --- a/src/sessionmanager.h +++ b/src/sessionmanager.h @@ -34,6 +34,7 @@ #include <QtCore/QObject> #include <QtCore/QString> + /** * */ @@ -43,13 +44,15 @@ class SessionManager : public QObject public: SessionManager(QObject *parent = 0); ~SessionManager(); + bool restoreSession(); -public slots: +private slots: void saveSession(); - bool restoreSession(); + private: QString m_sessionFilePath; + bool m_safe; }; |