diff --git a/plugins/projectmanagerview/projecttreeview.h b/plugins/projectmanagerview/projecttreeview.h --- a/plugins/projectmanagerview/projecttreeview.h +++ b/plugins/projectmanagerview/projecttreeview.h @@ -60,7 +60,7 @@ void slotActivated( const QModelIndex &index ); void popupContextMenu( const QPoint &pos ); void openProjectConfig(); - void saveState(); + void saveState(KDevelop::IProject* project = nullptr); void restoreState(KDevelop::IProject* project = nullptr); void aboutToShutdown(); diff --git a/plugins/projectmanagerview/projecttreeview.cpp b/plugins/projectmanagerview/projecttreeview.cpp --- a/plugins/projectmanagerview/projecttreeview.cpp +++ b/plugins/projectmanagerview/projecttreeview.cpp @@ -139,8 +139,6 @@ this, &ProjectTreeView::restoreState ); connect( ICore::self()->projectController(), &IProjectController::projectClosing, this, &ProjectTreeView::saveState ); - - restoreState(); } ProjectTreeView::~ProjectTreeView() @@ -383,31 +381,35 @@ } } -void ProjectTreeView::saveState() +void ProjectTreeView::saveState(IProject* project) { - KConfigGroup configGroup( ICore::self()->activeSession()->config(), settingsConfigGroup ); + KConfigGroup configGroup( ICore::self()->activeSession()->config(), QString(settingsConfigGroup).append(project->name()) ); ProjectModelSaver saver; + saver.setProject( project ); saver.setView( this ); saver.saveState( configGroup ); } void ProjectTreeView::restoreState(IProject* project) { - KConfigGroup configGroup( ICore::self()->activeSession()->config(), settingsConfigGroup ); - + KConfigGroup configGroup( ICore::self()->activeSession()->config(), QString(settingsConfigGroup).append(project->name()) ); ProjectModelSaver saver; saver.setProject( project ); saver.setView( this ); saver.restoreState( configGroup ); } void ProjectTreeView::aboutToShutdown() { - // save all projects, not just the last one that is closed disconnect( ICore::self()->projectController(), &IProjectController::projectClosing, this, &ProjectTreeView::saveState ); - saveState(); + + // save all projects, not just the last one that is closed + auto const projects = ICore::self()->projectController()->projects(); + for ( auto const& p: projects ) { + saveState( p ); + } } bool ProjectTreeView::event(QEvent* event)