From ddaa9dca80b847824153f5554724c6c251ea3845 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Thu, 25 Feb 2010 14:52:04 +0100 Subject: [PATCH] Save project settings when leaving the "projects" mode --- src/plugins/coreplugin/modemanager.cpp | 10 ++++++++-- src/plugins/coreplugin/modemanager.h | 5 ++++- src/plugins/projectexplorer/projectexplorer.cpp | 9 +++++++-- src/plugins/projectexplorer/projectexplorer.h | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index a725363f878..dd53a911f89 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -63,7 +63,9 @@ ModeManager *ModeManager::m_instance = 0; ModeManager::ModeManager(Internal::MainWindow *mainWindow, FancyTabWidget *modeStack) : m_mainWindow(mainWindow), m_modeStack(modeStack), - m_signalMapper(new QSignalMapper(this)) + m_signalMapper(new QSignalMapper(this)), + m_oldCurrent(-1) + { m_instance = this; @@ -247,7 +249,11 @@ void ModeManager::currentTabChanged(int index) m_addedContexts = mode->context(); foreach (const int context, m_addedContexts) core->addAdditionalContext(context); - emit currentModeChanged(mode); + IMode *oldMode = 0; + if (m_oldCurrent >= 0) + oldMode = m_modes.at(m_oldCurrent); + m_oldCurrent = index; + emit currentModeChanged(mode, oldMode); core->updateContext(); } } diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h index f33ac7dba2b..ed2d8eba8c1 100644 --- a/src/plugins/coreplugin/modemanager.h +++ b/src/plugins/coreplugin/modemanager.h @@ -74,7 +74,9 @@ public: signals: void currentModeAboutToChange(Core::IMode *mode); - void currentModeChanged(Core::IMode *mode); + + // the default argument '=0' is important for connects without the oldMode argument. + void currentModeChanged(Core::IMode *mode, Core::IMode *oldMode = 0); public slots: void activateMode(const QString &id); @@ -100,6 +102,7 @@ private: QVector<Command*> m_modeShortcuts; QSignalMapper *m_signalMapper; QList<int> m_addedContexts; + int m_oldCurrent; }; } // namespace Core diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 19589ac2573..7135b142d9d 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1140,9 +1140,13 @@ void ProjectExplorerPlugin::updateWelcomePage() d->m_welcomePage->updateWelcomePage(welcomePageData); } -void ProjectExplorerPlugin::currentModeChanged(Core::IMode *) +void ProjectExplorerPlugin::currentModeChanged(Core::IMode *mode, Core::IMode *oldMode) { + if (mode && mode->id() == QLatin1String(Core::Constants::MODE_WELCOME)) updateWelcomePage(); + if (oldMode == d->m_projectsMode) { + savePersistentSettings(); + } } void ProjectExplorerPlugin::determineSessionToRestoreAtStartup() @@ -1189,7 +1193,8 @@ void ProjectExplorerPlugin::restoreSession() // update welcome page Core::ModeManager *modeManager = Core::ModeManager::instance(); - connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*)), this, SLOT(currentModeChanged(Core::IMode*))); + connect(modeManager, SIGNAL(currentModeChanged(Core::IMode*, Core::IMode*)), + this, SLOT(currentModeChanged(Core::IMode*, Core::IMode*))); connect(d->m_welcomePage, SIGNAL(requestSession(QString)), this, SLOT(loadSession(QString))); connect(d->m_welcomePage, SIGNAL(requestProject(QString)), this, SLOT(loadProject(QString))); diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index c3a0a38e74e..e964ce8b4b8 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -217,7 +217,7 @@ private slots: void addErrorToApplicationOutputWindow(RunControl *, const QString &error); void loadProject(const QString &project) { openProject(project); } - void currentModeChanged(Core::IMode *mode); + void currentModeChanged(Core::IMode *mode, Core::IMode *oldMode); void updateActions(); private: -- GitLab