diff options
author | Eike Ziller <eike.ziller@theqtcompany.com> | 2016-05-02 15:39:52 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2016-05-04 09:39:13 +0000 |
commit | fad08a1e9b1141406cfdca8412f5aaede3258f15 (patch) | |
tree | 3ec7a69c5251975430f22ab2d658d9e5b954cb54 /src | |
parent | c8d0ba865196b1ce4955f671927969f0354a8b1c (diff) | |
download | qt-creator-fad08a1e9b1141406cfdca8412f5aaede3258f15.tar.gz |
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 <tobias.hunger@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/extensionsystem/pluginmanager.cpp | 6 | ||||
-rw-r--r-- | src/libs/extensionsystem/pluginmanager.h | 2 | ||||
-rw-r--r-- | src/libs/extensionsystem/pluginmanager_p.h | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/coreplugin.cpp | 7 |
4 files changed, 17 insertions, 0 deletions
diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 32580b9e8b..af2d59edf8 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 49ed9ae7ef..c2c4aee93b 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 968fa1d08e..b93f435658 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 2bd8144939..d4a0f2210b 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); |