diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 6949ea44e33..a19f52dd0bf 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2267,8 +2267,13 @@ void ProjectExplorerPlugin::addExistingFiles() void ProjectExplorerPlugin::addExistingFiles(const QStringList &filePaths) { ProjectNode *projectNode = qobject_cast(d->m_currentNode->projectNode()); + addExistingFiles(projectNode, filePaths); +} + +void ProjectExplorerPlugin::addExistingFiles(ProjectNode *projectNode, const QStringList &filePaths) +{ Core::ICore *core = Core::ICore::instance(); - const QString dir = directoryFor(d->m_currentNode); + const QString dir = directoryFor(projectNode); QStringList fileNames = filePaths; QHash fileTypeToFiles; foreach (const QString &fileName, fileNames) { diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 11389dc6e8c..f7c66b53a54 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -61,6 +61,7 @@ class IRunControlFactory; class Project; class Node; class BuildConfiguration; +class ProjectNode; namespace Internal { class ProjectFileFactory; @@ -120,6 +121,7 @@ public: void runProject(Project *pro, const QString &mode); void runRunConfiguration(ProjectExplorer::RunConfiguration *rc, const QString &mode); + void addExistingFiles(ProjectExplorer::ProjectNode *projectNode, const QStringList &filePaths); void addExistingFiles(const QStringList &filePaths); signals: diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp index ab56ae9e762..81a37bc2aec 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp @@ -115,8 +115,9 @@ AbstractQt4MaemoTarget::AbstractQt4MaemoTarget(Qt4Project *parent, const QString { setIcon(QIcon(":/projectexplorer/images/MaemoDevice.png")); connect(parent, SIGNAL(addedTarget(ProjectExplorer::Target*)), - this, SLOT(handleTargetAdded(ProjectExplorer::Target*)), - Qt::QueuedConnection); // Otherwise ProjextExplorerPlugin::addExistingFiles() won't be ready. + this, SLOT(handleTargetAdded(ProjectExplorer::Target*))); + connect(parent, SIGNAL(fromMapFinished()), + this, SLOT(handleFromMapFinished())); } AbstractQt4MaemoTarget::~AbstractQt4MaemoTarget() @@ -273,11 +274,24 @@ QSharedPointer AbstractQt4MaemoTarget::openFile(const QString &filePath, return file; } +void AbstractQt4MaemoTarget::handleFromMapFinished() +{ + handleTargetAdded(this); +} + void AbstractQt4MaemoTarget::handleTargetAdded(ProjectExplorer::Target *target) { if (target != this) return; + if (!project()->rootProjectNode()) { + // Project is not fully setup yet, happens on new project + // we wait for the fromMapFinished that comes afterwards + return; + } + + disconnect(project(), SIGNAL(fromMapFinished()), + this, SLOT(handleFromMapFinished())); disconnect(project(), SIGNAL(addedTarget(ProjectExplorer::Target*)), this, SLOT(handleTargetAdded(ProjectExplorer::Target*))); connect(project(), SIGNAL(aboutToRemoveTarget(ProjectExplorer::Target*)), @@ -346,7 +360,7 @@ AbstractQt4MaemoTarget::ActionStatus AbstractQt4MaemoTarget::createTemplates() .arg(files.join(QLatin1String("\n "))), QMessageBox::Yes | QMessageBox::No); if (button == QMessageBox::Yes) - ProjectExplorer::ProjectExplorerPlugin::instance()->addExistingFiles(files); + ProjectExplorer::ProjectExplorerPlugin::instance()->addExistingFiles(project()->rootProjectNode(), files); } return actionStatus; } diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h index 65fc6e80927..2130e6d8420 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h +++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h @@ -104,6 +104,7 @@ protected: private slots: void handleTargetAdded(ProjectExplorer::Target *target); + void handleFromMapFinished(); void handleTargetToBeRemoved(ProjectExplorer::Target *target); private: diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 709767aebbd..a3339ee4872 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -348,6 +348,8 @@ bool Qt4Project::fromMap(const QVariantMap &map) connect(this, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), this, SLOT(activeTargetWasChanged())); + emit fromMapFinished(); + return true; } diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 3fe2e7ffdf3..4895eb0a9c4 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -191,6 +191,7 @@ signals: void proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *node, bool); void proFileInvalidated(Qt4ProjectManager::Internal::Qt4ProFileNode *node); void buildDirectoryInitialized(); + void fromMapFinished(); public slots: void proFileParseError(const QString &errorMessage);