Browse Source

Projucer: Fixed a crash that could occur when saving a project multiple times

tags/2021-05-28
ed 7 years ago
parent
commit
b288da58f0
4 changed files with 19 additions and 3 deletions
  1. +12
    -3
      extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp
  2. +2
    -0
      extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.h
  3. +4
    -0
      extras/Projucer/Source/Project/jucer_Project.cpp
  4. +1
    -0
      extras/Projucer/Source/Project/jucer_Project.h

+ 12
- 3
extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp View File

@@ -810,7 +810,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
result.setInfo ("Save Project", result.setInfo ("Save Project",
"Saves the current project", "Saves the current project",
CommandCategories::general, 0); CommandCategories::general, 0);
result.setActive (project != nullptr);
result.setActive (project != nullptr && ! project->isCurrentlySaving());
break; break;
case CommandIDs::closeProject: case CommandIDs::closeProject:
@@ -824,7 +824,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
result.setInfo ("Save" + documentName, result.setInfo ("Save" + documentName,
"Saves the current document", "Saves the current document",
CommandCategories::general, 0); CommandCategories::general, 0);
result.setActive (currentDocument != nullptr || project != nullptr);
result.setActive (currentDocument != nullptr || (project != nullptr && ! project->isCurrentlySaving()));
result.defaultKeypresses.add (KeyPress ('s', ModifierKeys::commandModifier, 0)); result.defaultKeypresses.add (KeyPress ('s', ModifierKeys::commandModifier, 0));
break; break;
@@ -935,7 +935,7 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
result.setInfo ("Save Project and Open in IDE...", result.setInfo ("Save Project and Open in IDE...",
"Saves the project and launches it in an external IDE", "Saves the project and launches it in an external IDE",
CommandCategories::general, 0); CommandCategories::general, 0);
result.setActive (ProjectExporter::canProjectBeLaunched (project));
result.setActive (ProjectExporter::canProjectBeLaunched (project) && ! project->isCurrentlySaving());
result.defaultKeypresses.add (KeyPress ('l', ModifierKeys::commandModifier | ModifierKeys::shiftModifier, 0)); result.defaultKeypresses.add (KeyPress ('l', ModifierKeys::commandModifier | ModifierKeys::shiftModifier, 0));
break; break;
@@ -1049,6 +1049,10 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica
bool ProjectContentComponent::perform (const InvocationInfo& info) bool ProjectContentComponent::perform (const InvocationInfo& info)
{ {
// don't allow the project to be saved again if it's currently saving
if (isSaveCommand (info.commandID) && (project != nullptr && project->isCurrentlySaving()))
return false;
switch (info.commandID) switch (info.commandID)
{ {
case CommandIDs::saveProject: case CommandIDs::saveProject:
@@ -1121,6 +1125,11 @@ bool ProjectContentComponent::perform (const InvocationInfo& info)
return true; return true;
} }
bool ProjectContentComponent::isSaveCommand (const CommandID id)
{
return (id == CommandIDs::saveProject || id == CommandIDs::saveDocument || id == CommandIDs::saveAndOpenInIDE);
}
void ProjectContentComponent::getSelectedProjectItemsBeingDragged (const DragAndDropTarget::SourceDetails& dragSourceDetails, void ProjectContentComponent::getSelectedProjectItemsBeingDragged (const DragAndDropTarget::SourceDetails& dragSourceDetails,
OwnedArray<Project::Item>& selectedNodes) OwnedArray<Project::Item>& selectedNodes)
{ {


+ 2
- 0
extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.h View File

@@ -129,6 +129,8 @@ public:
void getCommandInfo (CommandID, ApplicationCommandInfo&) override; void getCommandInfo (CommandID, ApplicationCommandInfo&) override;
bool perform (const InvocationInfo&) override; bool perform (const InvocationInfo&) override;
bool isSaveCommand (const CommandID id);
void paint (Graphics&) override; void paint (Graphics&) override;
void resized() override; void resized() override;
void childBoundsChanged (Component*) override; void childBoundsChanged (Component*) override;


+ 4
- 0
extras/Projucer/Source/Project/jucer_Project.cpp View File

@@ -928,6 +928,10 @@ void Project::Item::setID (const String& newID) { state.setProperty (Ids::ID,
Drawable* Project::Item::loadAsImageFile() const Drawable* Project::Item::loadAsImageFile() const
{ {
const MessageManagerLock mml (ThreadPoolJob::getCurrentThreadPoolJob()); const MessageManagerLock mml (ThreadPoolJob::getCurrentThreadPoolJob());
if (! mml.lockWasGained())
return nullptr;
return isValid() ? Drawable::createFromImageFile (getFile()) return isValid() ? Drawable::createFromImageFile (getFile())
: nullptr; : nullptr;
} }


+ 1
- 0
extras/Projucer/Source/Project/jucer_Project.h View File

@@ -358,6 +358,7 @@ public:
String getUniqueTargetFolderSuffixForExporter (const String& exporterName, const String& baseTargetFolder); String getUniqueTargetFolderSuffixForExporter (const String& exporterName, const String& baseTargetFolder);
//============================================================================== //==============================================================================
bool isCurrentlySaving() const noexcept { return isSaving; }
bool shouldWaitAfterSaving = false; bool shouldWaitAfterSaving = false;
String specifiedExporterToSave = {}; String specifiedExporterToSave = {};


Loading…
Cancel
Save