diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h index 2acc8e04fc..163e1aaaf3 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h @@ -280,13 +280,6 @@ public: // Deleting the .rsrc files can be needed to force Xcode to update the version number. deleteRsrcFiles (getTargetFolder().getChildFile ("build")); - - if (! ProjucerApplication::getApp().isRunningCommandLine) - { - // Workaround for a bug where Xcode thinks the project is invalid if opened immedietely - // after writing - Thread::sleep (2000); - } } //============================================================================== diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h index 3e83676cc7..bebe8c1034 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h @@ -48,28 +48,29 @@ public: struct SaveThread : public ThreadWithProgressWindow { public: - SaveThread (ProjectSaver& ps) + SaveThread (ProjectSaver& ps, bool wait = false) : ThreadWithProgressWindow ("Saving...", true, false), - saver (ps), result (Result::ok()) + saver (ps), result (Result::ok()), shouldWaitAfterSaving (wait) {} void run() override { setProgress (-1); - result = saver.save (false); + result = saver.save (false, shouldWaitAfterSaving); } ProjectSaver& saver; Result result; + bool shouldWaitAfterSaving; JUCE_DECLARE_NON_COPYABLE (SaveThread) }; - Result save (bool showProgressBox) + Result save (bool showProgressBox, bool waitAfterSaving) { if (showProgressBox) { - SaveThread thread (*this); + SaveThread thread (*this, waitAfterSaving); thread.runThread(); return thread.result; } @@ -109,6 +110,11 @@ public: return Result::fail (errors[0]); } + // Workaround for a bug where Xcode thinks the project is invalid if opened immedietely + // after writing + if (waitAfterSaving) + Thread::sleep (2000); + return Result::ok(); } diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 3f07718104..c16f6f7150 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -383,7 +383,7 @@ Result Project::saveProject (const File& file, bool isCommandLineApp) const ScopedValueSetter vs (isSaving, true, false); ProjectSaver saver (*this, file); - return saver.save (! isCommandLineApp); + return saver.save (! isCommandLineApp, shouldWaitAfterSaving); } Result Project::saveResourcesOnly (const File& file) diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index aa5b92e851..141f69afe1 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -341,6 +341,9 @@ public: bool hasProjectBeenModified(); void updateModificationTime() { modificationTime = getFile().getLastModificationTime(); } + //============================================================================== + bool shouldWaitAfterSaving = false; + private: //============================================================================== void setMissingAudioPluginDefaultValues(); diff --git a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp index 87d5894a70..38b064cd18 100644 --- a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -628,10 +628,15 @@ bool ProjectContentComponent::goToCounterpart() return false; } -bool ProjectContentComponent::saveProject() +bool ProjectContentComponent::saveProject (bool shouldWait) { - return project != nullptr - && project->save (true, true) == FileBasedDocument::savedOk; + if (project != nullptr) + { + const ScopedValueSetter valueSetter (project->shouldWaitAfterSaving, shouldWait, false); + return (project->save (true, true) == FileBasedDocument::savedOk); + } + + return false; } void ProjectContentComponent::closeProject() @@ -737,7 +742,7 @@ void ProjectContentComponent::openInSelectedIDE (bool saveFirst) if (exporter->canLaunchProject() && exporter->getName() == selectedIDE) { if (saveFirst) - saveProject(); + saveProject (exporter->isXcode()); exporter->launchProject(); break; diff --git a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.h b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.h index f4e0d7d05e..782ad35847 100644 --- a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.h +++ b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.h @@ -75,7 +75,7 @@ public: bool canGoToCounterpart() const; bool goToCounterpart(); - bool saveProject(); + bool saveProject (bool shouldWait = false); void closeProject(); void openInSelectedIDE (bool saveFirst); void showNewExporterMenu();