diff --git a/src/plugins/coreplugin/modemanager.cpp b/src/plugins/coreplugin/modemanager.cpp index 7a8015a96f0..3aa21373145 100644 --- a/src/plugins/coreplugin/modemanager.cpp +++ b/src/plugins/coreplugin/modemanager.cpp @@ -78,6 +78,7 @@ struct ModeManagerPrivate QSignalMapper *m_signalMapper; Context m_addedContexts; int m_oldCurrent; + bool m_saveSettingsOnModeChange; }; static ModeManagerPrivate *d; @@ -104,10 +105,13 @@ ModeManager::ModeManager(Internal::MainWindow *mainWindow, d->m_oldCurrent = -1; d->m_actionBar = new Internal::FancyActionBar(modeStack); d->m_modeStack->addCornerWidget(d->m_actionBar); + d->m_saveSettingsOnModeChange = false; connect(d->m_modeStack, SIGNAL(currentAboutToShow(int)), SLOT(currentTabAboutToChange(int))); connect(d->m_modeStack, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int))); connect(d->m_signalMapper, SIGNAL(mapped(int)), this, SLOT(slotActivateMode(int))); + connect(ExtensionSystem::PluginManager::instance(), SIGNAL(initializationDone()), this, SLOT(handleStartup())); + connect(ICore::instance(), SIGNAL(coreAboutToClose()), this, SLOT(handleShutdown())); } void ModeManager::init() @@ -252,6 +256,12 @@ void ModeManager::enabledStateChanged() } } +void ModeManager::handleStartup() +{ d->m_saveSettingsOnModeChange = true; } + +void ModeManager::handleShutdown() +{ d->m_saveSettingsOnModeChange = false; } + void ModeManager::aboutToRemoveObject(QObject *obj) { IMode *mode = Aggregation::query(obj); @@ -290,8 +300,11 @@ void ModeManager::currentTabAboutToChange(int index) { if (index >= 0) { IMode *mode = d->m_modes.at(index); - if (mode) + if (mode) { + if (d->m_saveSettingsOnModeChange) + ICore::saveSettings(); emit currentModeAboutToChange(mode); + } } } diff --git a/src/plugins/coreplugin/modemanager.h b/src/plugins/coreplugin/modemanager.h index cdf26b84ae2..d1fc497d9ea 100644 --- a/src/plugins/coreplugin/modemanager.h +++ b/src/plugins/coreplugin/modemanager.h @@ -85,6 +85,8 @@ private slots: void currentTabChanged(int index); void updateModeToolTip(); void enabledStateChanged(); + void handleStartup(); + void handleShutdown(); }; } // namespace Core