diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 32580b9e8b9..af2d59edf82 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -833,6 +833,7 @@ void PluginManagerPrivate::nextDelayedInitialize() break; // do next delayedInitialize after a delay } if (delayedInitializeQueue.isEmpty()) { + m_isInitializationDone = true; delete delayedInitializeTimer; delayedInitializeTimer = 0; profilingSummary(); @@ -1673,6 +1674,11 @@ QString PluginManager::platformName() return result; } +bool PluginManager::isInitializationDone() +{ + return d->m_isInitializationDone; +} + /*! Retrieves one object with \a name from the object pool. \sa addObject() diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 49ed9ae7efc..c2c4aee93b0 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -147,6 +147,8 @@ public: static QString platformName(); + static bool isInitializationDone(); + signals: void objectAdded(QObject *obj); void aboutToRemoveObject(QObject *obj); diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h index 968fa1d08ec..b93f4356582 100644 --- a/src/libs/extensionsystem/pluginmanager_p.h +++ b/src/libs/extensionsystem/pluginmanager_p.h @@ -132,6 +132,8 @@ public: mutable QReadWriteLock m_lock; + bool m_isInitializationDone = false; + private slots: void nextDelayedInitialize(); void asyncShutdownFinished(); diff --git a/src/plugins/coreplugin/coreplugin.cpp b/src/plugins/coreplugin/coreplugin.cpp index 2bd81449392..d4a0f2210b8 100644 --- a/src/plugins/coreplugin/coreplugin.cpp +++ b/src/plugins/coreplugin/coreplugin.cpp @@ -240,6 +240,13 @@ QObject *CorePlugin::remoteCommand(const QStringList & /* options */, const QString &workingDirectory, const QStringList &args) { + if (!ExtensionSystem::PluginManager::isInitializationDone()) { + connect(ExtensionSystem::PluginManager::instance(), &ExtensionSystem::PluginManager::initializationDone, + this, [this, workingDirectory, args]() { + remoteCommand(QStringList(), workingDirectory, args); + }); + return nullptr; + } IDocument *res = m_mainWindow->openFiles( args, ICore::OpenFilesFlags(ICore::SwitchMode | ICore::CanContainLineAndColumnNumbers), workingDirectory);