diff --git a/kate/katemainwindow.h b/kate/katemainwindow.h --- a/kate/katemainwindow.h +++ b/kate/katemainwindow.h @@ -117,6 +117,9 @@ /*reimp*/ void saveProperties(KConfigGroup &config) override; /*reimp*/ void saveGlobalProperties(KConfig *sessionConfig) override; + void saveOpenRecent(KConfig *config); + void loadOpenRecent(const KConfig *config); + public: bool queryClose_internal(KTextEditor::Document *doc = nullptr); diff --git a/kate/katemainwindow.cpp b/kate/katemainwindow.cpp --- a/kate/katemainwindow.cpp +++ b/kate/katemainwindow.cpp @@ -1073,7 +1073,7 @@ } } - m_fileOpenRecent->saveEntries(KConfigGroup(config.config(), "Recent Files")); + saveOpenRecent(config.config()); m_viewManager->saveViewConfiguration(config); } @@ -1089,10 +1089,18 @@ finishRestore(); - m_fileOpenRecent->loadEntries(KConfigGroup(config.config(), "Recent Files")); + loadOpenRecent(config.config()); m_viewManager->restoreViewConfiguration(config); } +void KateMainWindow::saveOpenRecent(KConfig *config) { + m_fileOpenRecent->saveEntries(KConfigGroup(config, "Recent Files")); +} + +void KateMainWindow::loadOpenRecent(const KConfig *config) { + m_fileOpenRecent->loadEntries(KConfigGroup(config, "Recent Files")); +} + void KateMainWindow::saveGlobalProperties(KConfig *sessionConfig) { KateApp::self()->documentManager()->saveDocumentList(sessionConfig); diff --git a/kate/session/katesessionmanager.cpp b/kate/session/katesessionmanager.cpp --- a/kate/session/katesessionmanager.cpp +++ b/kate/session/katesessionmanager.cpp @@ -189,15 +189,15 @@ // window config KConfigGroup c(sharedConfig, "General"); - if (c.readEntry("Restore Window Configuration", true)) { - KConfig *cfg = sc; - bool delete_cfg = false; - // a new, named session, read settings of the default session. - if (! sc->hasGroup("Open MainWindows")) { - delete_cfg = true; - cfg = new KConfig(anonymousSessionFile(), KConfig::SimpleConfig); - } + KConfig *cfg = sc; + bool delete_cfg = false; + // a new, named session, read settings of the default session. + if (! sc->hasGroup("Open MainWindows")) { + delete_cfg = true; + cfg = new KConfig(anonymousSessionFile(), KConfig::SimpleConfig); + } + if (c.readEntry("Restore Window Configuration", true)) { int wCount = cfg->group("Open MainWindows").readEntry("Count", 1); for (int i = 0; i < wCount; ++i) { @@ -210,16 +210,29 @@ KateApp::self()->mainWindow(i)->restoreWindowConfig(KConfigGroup(cfg, QStringLiteral("MainWindow%1 Settings").arg(i))); } - if (delete_cfg) { - delete cfg; - } - // remove mainwindows we need no longer... if (wCount > 0) { while (wCount < KateApp::self()->mainWindowsCount()) { delete KateApp::self()->mainWindow(KateApp::self()->mainWindowsCount() - 1); } } + } else { + const int windowsCount = KateApp::self()->mainWindowsCount(); + for (int i = 0; i < windowsCount ; ++i) { + // if there are no main windows, create one to call loadOpenRecent() + if(i == windowsCount) { + KateMainWindow *w = KateApp::self()->newMainWindow(); + if (w !=nullptr) { + w->loadOpenRecent(cfg); + } + } else { + KateApp::self()->mainWindow(i)->loadOpenRecent(cfg); + } + } + } + + if (delete_cfg) { + delete cfg; } } @@ -341,6 +354,7 @@ bool saveWindowConfig = KConfigGroup(KSharedConfig::openConfig(), "General").readEntry("Restore Window Configuration", true); for (int i = 0; i < KateApp::self()->mainWindowsCount(); ++i) { KConfigGroup cg(sc, QStringLiteral("MainWindow%1").arg(i)); + // saveProperties() handles saving the "open recent" files list KateApp::self()->mainWindow(i)->saveProperties(cg); if (saveWindowConfig) { KateApp::self()->mainWindow(i)->saveWindowConfig(KConfigGroup(sc, QStringLiteral("MainWindow%1 Settings").arg(i)));