summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@theqtcompany.com>2016-05-02 15:39:52 +0200
committerEike Ziller <eike.ziller@qt.io>2016-05-04 09:39:13 +0000
commitfad08a1e9b1141406cfdca8412f5aaede3258f15 (patch)
tree3ec7a69c5251975430f22ab2d658d9e5b954cb54 /src
parentc8d0ba865196b1ce4955f671927969f0354a8b1c (diff)
downloadqt-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.cpp6
-rw-r--r--src/libs/extensionsystem/pluginmanager.h2
-rw-r--r--src/libs/extensionsystem/pluginmanager_p.h2
-rw-r--r--src/plugins/coreplugin/coreplugin.cpp7
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);