From fad08a1e9b1141406cfdca8412f5aaede3258f15 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 2 May 2016 15:39:52 +0200 Subject: [PATCH] OS X: Fix regression for opening projects from Finder The kits are restored in delayedInitialize now, but the file open event from Finder was delivered before that. That lead to the projects mode being opened with the kit configuration screen, but mostly no kits in it, when double-clicking a .pro file while Qt Creator is not running. Delay the remote open file command until plugin initialization is really done. Change-Id: I1a75f6b1f7bcefb4c53d594de11df0d3a0d2e5d3 Reviewed-by: Tobias Hunger --- src/libs/extensionsystem/pluginmanager.cpp | 6 ++++++ src/libs/extensionsystem/pluginmanager.h | 2 ++ src/libs/extensionsystem/pluginmanager_p.h | 2 ++ src/plugins/coreplugin/coreplugin.cpp | 7 +++++++ 4 files changed, 17 insertions(+) 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);