diff --git a/src/plugins/coreplugin/CMakeLists.txt b/src/plugins/coreplugin/CMakeLists.txt index da833620f31..6ed9dbe2234 100644 --- a/src/plugins/coreplugin/CMakeLists.txt +++ b/src/plugins/coreplugin/CMakeLists.txt @@ -266,7 +266,6 @@ add_qtc_plugin(Core rightpane.h session.cpp session.h - session_p.h sessiondialog.cpp sessiondialog.h sessionmodel.cpp diff --git a/src/plugins/coreplugin/coreplugin.qbs b/src/plugins/coreplugin/coreplugin.qbs index 000fbc22883..a95d22287db 100644 --- a/src/plugins/coreplugin/coreplugin.qbs +++ b/src/plugins/coreplugin/coreplugin.qbs @@ -149,7 +149,6 @@ Project { "rightpane.h", "session.cpp", "session.h", - "session_p.h", "sessiondialog.cpp", "sessiondialog.h", "sessionmodel.cpp", diff --git a/src/plugins/coreplugin/session.cpp b/src/plugins/coreplugin/session.cpp index 2ad04e71fb3..07f7e5f175d 100644 --- a/src/plugins/coreplugin/session.cpp +++ b/src/plugins/coreplugin/session.cpp @@ -2,7 +2,6 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "session.h" -#include "session_p.h" #include "sessiondialog.h" @@ -23,12 +22,15 @@ #include #include #include +#include #include +#include #include #include #include #include +#include #include #include #include @@ -67,15 +69,53 @@ const char M_SESSION[] = "ProjectExplorer.Menu.Session"; This could be improved. */ +class SessionManagerPrivate +{ +public: + void restoreStartupSession(); + + void restoreValues(const PersistentSettingsReader &reader); + void restoreSessionValues(const PersistentSettingsReader &reader); + void restoreEditors(); + + void saveSettings(); + void restoreSettings(); + bool isAutoRestoreLastSession(); + void setAutoRestoreLastSession(bool restore); + + void updateSessionMenu(); + + static QString windowTitleAddition(const FilePath &filePath); + static QString sessionTitle(const FilePath &filePath); + + QString m_sessionName = "default"; + bool m_isStartupSessionRestored = false; + bool m_isAutoRestoreLastSession = false; + bool m_virginSession = true; + bool m_loadingSession = false; + + mutable QStringList m_sessions; + mutable QHash m_sessionDateTimes; + QHash m_lastActiveTimes; + + QMap m_values; + QMap m_sessionValues; + QFutureInterface m_future; + PersistentSettingsWriter *m_writer = nullptr; + + QMenu *m_sessionMenu; + QAction *m_sessionManagerAction; +}; + static SessionManager *m_instance = nullptr; -SessionManagerPrivate *sb_d = nullptr; +static SessionManagerPrivate *d = nullptr; SessionManager::SessionManager() { m_instance = this; - sb_d = new SessionManagerPrivate; + d = new SessionManagerPrivate; - connect(ICore::instance(), &ICore::coreOpened, this, [] { sb_d->restoreStartupSession(); }); + connect(ICore::instance(), &ICore::coreOpened, this, [] { d->restoreStartupSession(); }); connect(ModeManager::instance(), &ModeManager::currentModeChanged, this, &SessionManager::saveActiveMode); @@ -83,7 +123,7 @@ SessionManager::SessionManager() connect(ICore::instance(), &ICore::saveSettingsRequested, this, [] { if (!SessionManager::isLoadingSession()) SessionManager::saveSession(); - sb_d->saveSettings(); + d->saveSettings(); }); connect(EditorManager::instance(), &EditorManager::editorOpened, @@ -101,17 +141,17 @@ SessionManager::SessionManager() msession->menu()->setTitle(PE::Tr::tr("S&essions")); msession->setOnAllDisabledBehavior(ActionContainer::Show); mfile->addMenu(msession, Core::Constants::G_FILE_SESSION); - sb_d->m_sessionMenu = msession->menu(); - connect(mfile->menu(), &QMenu::aboutToShow, this, [] { sb_d->updateSessionMenu(); }); + d->m_sessionMenu = msession->menu(); + connect(mfile->menu(), &QMenu::aboutToShow, this, [] { d->updateSessionMenu(); }); // session manager action - sb_d->m_sessionManagerAction = new QAction(PE::Tr::tr("&Manage..."), this); - sb_d->m_sessionMenu->addAction(sb_d->m_sessionManagerAction); - sb_d->m_sessionMenu->addSeparator(); - Command *cmd = ActionManager::registerAction(sb_d->m_sessionManagerAction, + d->m_sessionManagerAction = new QAction(PE::Tr::tr("&Manage..."), this); + d->m_sessionMenu->addAction(d->m_sessionManagerAction); + d->m_sessionMenu->addSeparator(); + Command *cmd = ActionManager::registerAction(d->m_sessionManagerAction, "ProjectExplorer.ManageSessions"); cmd->setDefaultKeySequence(QKeySequence()); - connect(sb_d->m_sessionManagerAction, + connect(d->m_sessionManagerAction, &QAction::triggered, SessionManager::instance(), &SessionManager::showSessionManager); @@ -127,15 +167,15 @@ SessionManager::SessionManager() return SessionManager::activeSession(); }); - sb_d->restoreSettings(); + d->restoreSettings(); } SessionManager::~SessionManager() { - emit m_instance->aboutToUnloadSession(sb_d->m_sessionName); - delete sb_d->m_writer; - delete sb_d; - sb_d = nullptr; + emit m_instance->aboutToUnloadSession(d->m_sessionName); + delete d->m_writer; + delete d; + d = nullptr; } SessionManager *SessionManager::instance() @@ -145,7 +185,7 @@ SessionManager *SessionManager::instance() bool SessionManager::isDefaultVirgin() { - return isDefaultSession(sb_d->m_sessionName) && sb_d->m_virginSession; + return isDefaultSession(d->m_sessionName) && d->m_virginSession; } bool SessionManager::isDefaultSession(const QString &session) @@ -161,7 +201,7 @@ void SessionManager::saveActiveMode(Id mode) bool SessionManager::isLoadingSession() { - return sb_d->m_loadingSession; + return d->m_loadingSession; } /*! @@ -171,63 +211,63 @@ bool SessionManager::isLoadingSession() void SessionManager::setValue(const Key &name, const QVariant &value) { - if (sb_d->m_values.value(name) == value) + if (d->m_values.value(name) == value) return; - sb_d->m_values.insert(name, value); + d->m_values.insert(name, value); } QVariant SessionManager::value(const Key &name) { - auto it = sb_d->m_values.constFind(name); - return (it == sb_d->m_values.constEnd()) ? QVariant() : *it; + auto it = d->m_values.constFind(name); + return (it == d->m_values.constEnd()) ? QVariant() : *it; } void SessionManager::setSessionValue(const Key &name, const QVariant &value) { - sb_d->m_sessionValues.insert(name, value); + d->m_sessionValues.insert(name, value); } QVariant SessionManager::sessionValue(const Key &name, const QVariant &defaultValue) { - auto it = sb_d->m_sessionValues.constFind(name); - return (it == sb_d->m_sessionValues.constEnd()) ? defaultValue : *it; + auto it = d->m_sessionValues.constFind(name); + return (it == d->m_sessionValues.constEnd()) ? defaultValue : *it; } QString SessionManager::activeSession() { - return sb_d->m_sessionName; + return d->m_sessionName; } QStringList SessionManager::sessions() { - if (sb_d->m_sessions.isEmpty()) { + if (d->m_sessions.isEmpty()) { // We are not initialized yet, so do that now const FilePaths sessionFiles = ICore::userResourcePath().dirEntries({{"*qws"}}, QDir::Time | QDir::Reversed); const QVariantMap lastActiveTimes = ICore::settings()->value(LAST_ACTIVE_TIMES_KEY).toMap(); for (const FilePath &file : sessionFiles) { const QString &name = file.completeBaseName(); - sb_d->m_sessionDateTimes.insert(name, file.lastModified()); + d->m_sessionDateTimes.insert(name, file.lastModified()); const auto lastActiveTime = lastActiveTimes.find(name); - sb_d->m_lastActiveTimes.insert(name, lastActiveTime != lastActiveTimes.end() + d->m_lastActiveTimes.insert(name, lastActiveTime != lastActiveTimes.end() ? lastActiveTime->toDateTime() : file.lastModified()); if (name != QLatin1String(DEFAULT_SESSION)) - sb_d->m_sessions << name; + d->m_sessions << name; } - sb_d->m_sessions.prepend(QLatin1String(DEFAULT_SESSION)); + d->m_sessions.prepend(QLatin1String(DEFAULT_SESSION)); } - return sb_d->m_sessions; + return d->m_sessions; } QDateTime SessionManager::sessionDateTime(const QString &session) { - return sb_d->m_sessionDateTimes.value(session); + return d->m_sessionDateTimes.value(session); } QDateTime SessionManager::lastActiveTime(const QString &session) { - return sb_d->m_lastActiveTimes.value(session); + return d->m_lastActiveTimes.value(session); } FilePath SessionManager::sessionNameToFileName(const QString &session) @@ -246,9 +286,9 @@ bool SessionManager::createSession(const QString &session) { if (sessions().contains(session)) return false; - Q_ASSERT(sb_d->m_sessions.size() > 0); - sb_d->m_sessions.insert(1, session); - sb_d->m_lastActiveTimes.insert(session, QDateTime::currentDateTime()); + Q_ASSERT(d->m_sessions.size() > 0); + d->m_sessions.insert(1, session); + d->m_lastActiveTimes.insert(session, QDateTime::currentDateTime()); emit instance()->sessionCreated(session); return true; } @@ -267,9 +307,9 @@ void SessionManager::showSessionManager() { saveSession(); Internal::SessionDialog sessionDialog(ICore::dialogParent()); - sessionDialog.setAutoLoadSession(sb_d->isAutoRestoreLastSession()); + sessionDialog.setAutoLoadSession(d->isAutoRestoreLastSession()); sessionDialog.exec(); - sb_d->setAutoRestoreLastSession(sessionDialog.autoLoadSession()); + d->setAutoRestoreLastSession(sessionDialog.autoLoadSession()); } /*! @@ -299,10 +339,10 @@ bool SessionManager::confirmSessionDelete(const QStringList &sessions) */ bool SessionManager::deleteSession(const QString &session) { - if (!sb_d->m_sessions.contains(session)) + if (!d->m_sessions.contains(session)) return false; - sb_d->m_sessions.removeOne(session); - sb_d->m_lastActiveTimes.remove(session); + d->m_sessions.removeOne(session); + d->m_lastActiveTimes.remove(session); emit instance()->sessionRemoved(session); FilePath sessionFile = sessionNameToFileName(session); if (sessionFile.exists()) @@ -318,14 +358,14 @@ void SessionManager::deleteSessions(const QStringList &sessions) bool SessionManager::cloneSession(const QString &original, const QString &clone) { - if (!sb_d->m_sessions.contains(original)) + if (!d->m_sessions.contains(original)) return false; FilePath sessionFile = sessionNameToFileName(original); // If the file does not exist, we can still clone if (!sessionFile.exists() || sessionFile.copyFile(sessionNameToFileName(clone))) { - sb_d->m_sessions.insert(1, clone); - sb_d->m_sessionDateTimes.insert(clone, sessionNameToFileName(clone).lastModified()); + d->m_sessions.insert(1, clone); + d->m_sessionDateTimes.insert(clone, sessionNameToFileName(clone).lastModified()); emit instance()->sessionCreated(clone); return true; @@ -353,7 +393,7 @@ static QString determineSessionToRestoreAtStartup() } } // Handle settings only after command line arguments: - if (sb_d->m_isAutoRestoreLastSession) + if (d->m_isAutoRestoreLastSession) return SessionManager::startupSession(); return {}; } @@ -419,7 +459,7 @@ void SessionManagerPrivate::saveSettings() { QtcSettings *s = ICore::settings(); QVariantMap times; - for (auto it = sb_d->m_lastActiveTimes.cbegin(); it != sb_d->m_lastActiveTimes.cend(); ++it) + for (auto it = d->m_lastActiveTimes.cbegin(); it != d->m_lastActiveTimes.cend(); ++it) times.insert(it.key(), it.value()); s->setValue(LAST_ACTIVE_TIMES_KEY, times); if (SessionManager::isDefaultVirgin()) { @@ -429,13 +469,13 @@ void SessionManagerPrivate::saveSettings() s->setValue(LASTSESSION_KEY, SessionManager::activeSession()); } s->setValueWithDefault(AUTO_RESTORE_SESSION_SETTINGS_KEY, - sb_d->m_isAutoRestoreLastSession, + d->m_isAutoRestoreLastSession, kIsAutoRestoreLastSessionDefault); } void SessionManagerPrivate::restoreSettings() { - sb_d->m_isAutoRestoreLastSession = ICore::settings() + d->m_isAutoRestoreLastSession = ICore::settings() ->value(AUTO_RESTORE_SESSION_SETTINGS_KEY, kIsAutoRestoreLastSessionDefault) .toBool(); @@ -443,12 +483,12 @@ void SessionManagerPrivate::restoreSettings() bool SessionManagerPrivate::isAutoRestoreLastSession() { - return sb_d->m_isAutoRestoreLastSession; + return d->m_isAutoRestoreLastSession; } void SessionManagerPrivate::setAutoRestoreLastSession(bool restore) { - sb_d->m_isAutoRestoreLastSession = restore; + d->m_isAutoRestoreLastSession = restore; } void SessionManagerPrivate::updateSessionMenu() @@ -534,18 +574,18 @@ QString SessionManager::startupSession() void SessionManager::markSessionFileDirty() { - sb_d->m_virginSession = false; + d->m_virginSession = false; } void SessionManager::sessionLoadingProgress() { - sb_d->m_future.setProgressValue(sb_d->m_future.progressValue() + 1); + d->m_future.setProgressValue(d->m_future.progressValue() + 1); QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } void SessionManager::addSessionLoadingSteps(int steps) { - sb_d->m_future.setProgressRange(0, sb_d->m_future.progressMaximum() + steps); + d->m_future.setProgressRange(0, d->m_future.progressMaximum() + steps); } /* @@ -577,13 +617,13 @@ bool SessionManager::loadSession(const QString &session, bool initial) { const bool loadImplicitDefault = session.isEmpty(); const bool switchFromImplicitToExplicitDefault = session == DEFAULT_SESSION - && sb_d->m_sessionName == DEFAULT_SESSION + && d->m_sessionName == DEFAULT_SESSION && !initial; // Do nothing if we have that session already loaded, // exception if the session is the default virgin session // we still want to be able to load the default session - if (session == sb_d->m_sessionName && !SessionManager::isDefaultVirgin()) + if (session == d->m_sessionName && !SessionManager::isDefaultVirgin()) return true; if (!loadImplicitDefault && !SessionManager::sessions().contains(session)) @@ -604,7 +644,7 @@ bool SessionManager::loadSession(const QString &session, bool initial) } if (loadImplicitDefault) { - sb_d->restoreValues(reader); + d->restoreValues(reader); emit SessionManager::instance()->sessionLoaded(DEFAULT_SESSION); return true; } @@ -613,44 +653,44 @@ bool SessionManager::loadSession(const QString &session, bool initial) return true; } - sb_d->m_loadingSession = true; + d->m_loadingSession = true; // Allow everyone to set something in the session and before saving - emit SessionManager::instance()->aboutToUnloadSession(sb_d->m_sessionName); + emit SessionManager::instance()->aboutToUnloadSession(d->m_sessionName); if (!saveSession()) { - sb_d->m_loadingSession = false; + d->m_loadingSession = false; return false; } // Clean up if (!EditorManager::closeAllEditors()) { - sb_d->m_loadingSession = false; + d->m_loadingSession = false; return false; } if (!switchFromImplicitToExplicitDefault) - sb_d->m_values.clear(); - sb_d->m_sessionValues.clear(); + d->m_values.clear(); + d->m_sessionValues.clear(); - sb_d->m_sessionName = session; - delete sb_d->m_writer; - sb_d->m_writer = nullptr; + d->m_sessionName = session; + delete d->m_writer; + d->m_writer = nullptr; EditorManager::updateWindowTitles(); - sb_d->m_virginSession = false; + d->m_virginSession = false; - ProgressManager::addTask(sb_d->m_future.future(), + ProgressManager::addTask(d->m_future.future(), PE::Tr::tr("Loading Session"), "ProjectExplorer.SessionFile.Load"); - sb_d->m_future.setProgressRange(0, 1 /*initialization*/ + 1 /*editors*/); - sb_d->m_future.setProgressValue(0); + d->m_future.setProgressRange(0, 1 /*initialization*/ + 1 /*editors*/); + d->m_future.setProgressValue(0); if (fileName.exists()) { if (!switchFromImplicitToExplicitDefault) - sb_d->restoreValues(reader); - sb_d->restoreSessionValues(reader); + d->restoreValues(reader); + d->restoreSessionValues(reader); } QColor c = QColor(SessionManager::sessionValue("Color").toString()); @@ -659,19 +699,19 @@ bool SessionManager::loadSession(const QString &session, bool initial) SessionManager::sessionLoadingProgress(); - sb_d->restoreEditors(); + d->restoreEditors(); // let other code restore the session emit SessionManager::instance()->aboutToLoadSession(session); - sb_d->m_future.reportFinished(); - sb_d->m_future = QFutureInterface(); + d->m_future.reportFinished(); + d->m_future = QFutureInterface(); - sb_d->m_lastActiveTimes.insert(session, QDateTime::currentDateTime()); + d->m_lastActiveTimes.insert(session, QDateTime::currentDateTime()); emit SessionManager::instance()->sessionLoaded(session); - sb_d->m_loadingSession = false; + d->m_loadingSession = false; return true; } @@ -679,7 +719,7 @@ bool SessionManager::saveSession() { emit SessionManager::instance()->aboutToSaveSession(); - const FilePath filePath = SessionManager::sessionNameToFileName(sb_d->m_sessionName); + const FilePath filePath = SessionManager::sessionNameToFileName(d->m_sessionName); Store data; // See the explanation at loadSession() for how we handle the implicit default session. @@ -706,33 +746,33 @@ bool SessionManager::saveSession() } setSessionValue("EditorSettings", EditorManager::saveState().toBase64()); - const auto end = sb_d->m_sessionValues.constEnd(); - for (auto it = sb_d->m_sessionValues.constBegin(); it != end; ++it) + const auto end = d->m_sessionValues.constEnd(); + for (auto it = d->m_sessionValues.constBegin(); it != end; ++it) data.insert(it.key(), it.value()); } - const auto end = sb_d->m_values.constEnd(); + const auto end = d->m_values.constEnd(); KeyList keys; - for (auto it = sb_d->m_values.constBegin(); it != end; ++it) { + for (auto it = d->m_values.constBegin(); it != end; ++it) { data.insert("value-" + it.key(), it.value()); keys << it.key(); } data.insert("valueKeys", QVariant::fromValue(keys)); - if (!sb_d->m_writer || sb_d->m_writer->fileName() != filePath) { - delete sb_d->m_writer; - sb_d->m_writer = new PersistentSettingsWriter(filePath, "QtCreatorSession"); + if (!d->m_writer || d->m_writer->fileName() != filePath) { + delete d->m_writer; + d->m_writer = new PersistentSettingsWriter(filePath, "QtCreatorSession"); } - const bool result = sb_d->m_writer->save(data, ICore::dialogParent()); + const bool result = d->m_writer->save(data, ICore::dialogParent()); if (result) { if (!SessionManager::isDefaultVirgin()) - sb_d->m_sessionDateTimes.insert(SessionManager::activeSession(), + d->m_sessionDateTimes.insert(SessionManager::activeSession(), QDateTime::currentDateTime()); } else { QMessageBox::warning(ICore::dialogParent(), PE::Tr::tr("Error while saving session"), PE::Tr::tr("Could not save session to file \"%1\"") - .arg(sb_d->m_writer->fileName().toUserOutput())); + .arg(d->m_writer->fileName().toUserOutput())); } return result; @@ -740,7 +780,7 @@ bool SessionManager::saveSession() bool SessionManager::isStartupSessionRestored() { - return sb_d->m_isStartupSessionRestored; + return d->m_isStartupSessionRestored; } } // namespace Core diff --git a/src/plugins/coreplugin/session_p.h b/src/plugins/coreplugin/session_p.h deleted file mode 100644 index 880e51d4db4..00000000000 --- a/src/plugins/coreplugin/session_p.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2023 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include -#include - -#include - -QT_BEGIN_NAMESPACE -class QAction; -class QMenu; -QT_END_NAMESPACE - -using namespace Utils; - -namespace Core { - -class SessionManagerPrivate -{ -public: - void restoreStartupSession(); - - void restoreValues(const PersistentSettingsReader &reader); - void restoreSessionValues(const PersistentSettingsReader &reader); - void restoreEditors(); - - void saveSettings(); - void restoreSettings(); - bool isAutoRestoreLastSession(); - void setAutoRestoreLastSession(bool restore); - - void updateSessionMenu(); - - static QString windowTitleAddition(const FilePath &filePath); - static QString sessionTitle(const FilePath &filePath); - - QString m_sessionName = "default"; - bool m_isStartupSessionRestored = false; - bool m_isAutoRestoreLastSession = false; - bool m_virginSession = true; - bool m_loadingSession = false; - - mutable QStringList m_sessions; - mutable QHash m_sessionDateTimes; - QHash m_lastActiveTimes; - - QMap m_values; - QMap m_sessionValues; - QFutureInterface m_future; - PersistentSettingsWriter *m_writer = nullptr; - - QMenu *m_sessionMenu; - QAction *m_sessionManagerAction; -}; - -extern SessionManagerPrivate *sb_d; - -} // namespace Core