diff --git a/extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp b/extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp index 2e9f01b7ef..7fc5943c3a 100644 --- a/extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp +++ b/extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp @@ -400,7 +400,12 @@ bool ProjectContentComponent::goToCounterpart() void ProjectContentComponent::saveProjectAsync() { - if (project != nullptr) + if (project == nullptr) + return; + + if (project->isTemporaryProject()) + project->saveAndMoveTemporaryProject (false); + else project->saveAsync (true, true, nullptr); } @@ -501,6 +506,12 @@ void ProjectContentComponent::openInSelectedIDE (bool saveFirst) { if (saveFirst) { + if (project->isTemporaryProject()) + { + project->saveAndMoveTemporaryProject (true); + return; + } + SafePointer safeThis { this }; project->saveAsync (true, true, [safeThis] (Project::SaveResult r) { diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 5fd7e5c6a6..56d27bd6b4 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -700,15 +700,17 @@ void Project::saveProject (Async async, return; } - if (saver != nullptr) + if (isTemporaryProject()) { - onCompletion (Result::ok()); + // Don't try to save a temporary project directly. Instead, check whether the + // project is temporary before saving it, and call saveAndMoveTemporaryProject + // in that case. + onCompletion (Result::fail ("Cannot save temporary project.")); return; } - if (isTemporaryProject()) + if (saver != nullptr) { - saveAndMoveTemporaryProject (false); onCompletion (Result::ok()); return; } @@ -731,9 +733,7 @@ void Project::saveProject (Async async, return; ref->saver = nullptr; - - if (onCompletion != nullptr) - onCompletion (result); + NullCheckedInvocation::invoke (onCompletion, result); }); } diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index 9061570a7c..4db0662777 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -131,6 +131,7 @@ public: void saveDocumentAsync (const File& file, std::function callback) override; void saveProject (Async, ProjectExporter* exporterToSave, std::function onCompletion); + void saveAndMoveTemporaryProject (bool openInIDE); Result saveResourcesOnly(); void openProjectInIDE (ProjectExporter& exporterToOpen); @@ -577,8 +578,6 @@ private: File tempDirectory; std::pair cachedFileState; - void saveAndMoveTemporaryProject (bool openInIDE); - //============================================================================== friend class Item; StringPairArray parsedPreprocessorDefs;