diff options
author | Andrea Diamantini <adjam7@gmail.com> | 2010-06-01 16:39:07 +0200 |
---|---|---|
committer | Andrea Diamantini <adjam7@gmail.com> | 2010-06-01 16:41:21 +0200 |
commit | 6e5d8e1e31db2bd60f0714b30ecd608bb819c8b9 (patch) | |
tree | 69c5dd14f750fa97015d48256655c345e1ba5be7 | |
parent | No history back action enabled when history is empty (diff) | |
download | rekonq-6e5d8e1e31db2bd60f0714b30ecd608bb819c8b9.tar.xz |
uhm... a BIG change to fix a tiny bug :(
The problem is about restoring tabs with arguments
Now we really handle ALL the 8 possible cases on startup.
-rw-r--r-- | src/application.cpp | 111 |
1 files changed, 74 insertions, 37 deletions
diff --git a/src/application.cpp b/src/application.cpp index 7cceac49..94a89c90 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -106,19 +106,74 @@ int Application::newInstance() KCmdLineArgs::setCwd(QDir::currentPath().toUtf8()); KCmdLineArgs* args = KCmdLineArgs::parsedArgs(); + // not that easy, indeed + // We have to consider 3 variables here: + // 1) Is first load? + // 2) Are there arguments? + // 3) Is rekonq recovering from crash? + // so, we have 8 possible cases... bool isFirstLoad = m_mainWindows.isEmpty(); - - // is your app session restored? restore session... - // this mechanism also falls back to load usual plain rekonq - // if something goes wrong... - if (isFirstLoad && ReKonfig::recoverOnCrash() == 1 && sessionManager()->restoreSession()) + bool areThereArguments = (args->count() > 0); + bool isRekonqCrashed = (ReKonfig::recoverOnCrash() == 1); + + kDebug() << "is first load? " << isFirstLoad; + kDebug() << "are there arguments? " << areThereArguments; + kDebug() << "is rekonq crashed? " << isRekonqCrashed; + + int exitValue = 1 * isFirstLoad + 2 * areThereArguments + 4 * isRekonqCrashed; + + if(isRekonqCrashed) { - QTimer::singleShot(0, this, SLOT(postLaunch())); - kDebug() << "session restored"; - return 1; + if( isFirstLoad && sessionManager()->restoreSession() ) + { + kDebug() << "session restored from crash"; + } } - - if (args->count() == 0) + else + { + if( isFirstLoad && ReKonfig::startupBehaviour() == 2 ) + { + sessionManager()->restoreSession(); + kDebug() << "session restored following settings"; + if(areThereArguments) + loadUrl( KUrl("about:blank"), Rekonq::NewCurrentTab); + } + } + + if(areThereArguments) + { + KUrl::List urlList; + for(int i = 0; i < args->count(); ++i) + { + const KUrl u = args->url(i); + if (u.isLocalFile() && QFile::exists(u.toLocalFile())) // "rekonq somefile.html" case + urlList += u; + else + urlList += KUrl( args->arg(i) ); // "rekonq kde.org" || "rekonq kde:kdialog" case + } + + if (isFirstLoad) + { + // No windows in the current desktop? No windows at all? + // Create a new one and load there sites... + loadUrl(urlList.at(0), Rekonq::CurrentTab); + for (int i = 1; i < urlList.count(); ++i) + loadUrl( urlList.at(i), Rekonq::SettingOpenTab); + } + else + { + // are there any windows there? use it + int index = m_mainWindows.size(); + if (index > 0) + { + MainWindow *m = m_mainWindows.at(index - 1).data(); + m->activateWindow(); + Q_FOREACH(const KUrl &u, urlList) + loadUrl(u, Rekonq::NewCurrentTab); + } + } + } + else { if (isFirstLoad) // we are starting rekonq, for the first time with no args: use startup behaviour { @@ -131,8 +186,8 @@ int Application::newInstance() loadUrl(KUrl("about:home")); break; case 2: // restore session - if (sessionManager()->restoreSession()) - break; + // NOTE: this has just been considered + break; default: mainWindow()->homePage(); break; @@ -156,34 +211,16 @@ int Application::newInstance() break; } - } + } } - else + + + if(isFirstLoad) { - if (isFirstLoad) - { - // No windows in the current desktop? No windows at all? - // Create a new one and load there sites... - loadUrl(args->url(0), Rekonq::CurrentTab); - for (int i = 1; i < args->count(); ++i) - loadUrl( args->url(i), Rekonq::SettingOpenTab); - } - else - { - // are there any windows there? use it - int index = m_mainWindows.size(); - if (index > 0) - { - MainWindow *m = m_mainWindows.at(index - 1).data(); - m->activateWindow(); - for (int i = 0; i < args->count(); ++i) - loadUrl( args->url(i), Rekonq::NewCurrentTab); - } - } + QTimer::singleShot(0, this, SLOT(postLaunch())); } - - QTimer::singleShot(0, this, SLOT(postLaunch())); - return 0; + + return exitValue; } |