diff --git a/extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp b/extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp index 0f3f3ce590..bd5a1eb93a 100644 --- a/extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp +++ b/extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp @@ -277,13 +277,22 @@ void HeaderComponent::initialiseButtons() { if (project != nullptr) { - if (project->hasIncompatibleLicenseTypeAndSplashScreenSetting()) + if (project->isSaveAndExportDisabled()) { - auto child = project->getProjectMessages().getChildWithName (ProjectMessages::Ids::warning) - .getChildWithName (ProjectMessages::Ids::incompatibleLicense); + auto setWarningVisible = [this] (const Identifier& identifier) + { + auto child = project->getProjectMessages().getChildWithName (ProjectMessages::Ids::warning) + .getChildWithName (identifier); + + if (child.isValid()) + child.setProperty (ProjectMessages::Ids::isVisible, true, nullptr); + }; + + if (project->hasIncompatibleLicenseTypeAndSplashScreenSetting()) + setWarningVisible (ProjectMessages::Ids::incompatibleLicense); - if (child.isValid()) - child.setProperty (ProjectMessages::Ids::isVisible, true, nullptr); + if (project->isFileModificationCheckPending()) + setWarningVisible (ProjectMessages::Ids::jucerFileModified); } else { diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 9ea056a5aa..40c14b1672 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -39,22 +39,22 @@ Project::ProjectFileModificationPoller::ProjectFileModificationPoller (Project& void Project::ProjectFileModificationPoller::reset() { project.removeProjectMessage (ProjectMessages::Ids::jucerFileModified); - showingWarning = false; + pending = false; startTimer (250); } void Project::ProjectFileModificationPoller::timerCallback() { - if (project.updateCachedFileState() && ! showingWarning) + if (project.updateCachedFileState() && ! pending) { project.addProjectMessage (ProjectMessages::Ids::jucerFileModified, { { "Save current state", [this] { resaveProject(); } }, - { "Re-load from disk", [this] { reloadProjectFromDisk(); } }, - { "Ignore", [this] { reset(); } } }); + { "Re-load from disk", [this] { reloadProjectFromDisk(); } }, + { "Ignore", [this] { reset(); } } }); stopTimer(); - showingWarning = true; + pending = true; } } @@ -79,8 +79,8 @@ void Project::ProjectFileModificationPoller::reloadProjectFromDisk() void Project::ProjectFileModificationPoller::resaveProject() { - project.saveProject(); reset(); + project.saveProject(); } //============================================================================== @@ -745,9 +745,15 @@ bool Project::hasIncompatibleLicenseTypeAndSplashScreenSetting() const && ! ProjucerApplication::getApp().getLicenseController().getCurrentState().canUnlockFullFeatures(); } +bool Project::isFileModificationCheckPending() const +{ + return fileModificationPoller.isCheckPending(); +} + bool Project::isSaveAndExportDisabled() const { - return ! ProjucerApplication::getApp().isRunningCommandLine && hasIncompatibleLicenseTypeAndSplashScreenSetting(); + return ! ProjucerApplication::getApp().isRunningCommandLine + && (hasIncompatibleLicenseTypeAndSplashScreenSetting() || isFileModificationCheckPending()); } void Project::updateLicenseWarning() diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index 616b117b7c..ff12581974 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -501,6 +501,7 @@ public: //============================================================================== bool hasIncompatibleLicenseTypeAndSplashScreenSetting() const; + bool isFileModificationCheckPending() const; bool isSaveAndExportDisabled() const; private: @@ -514,6 +515,7 @@ private: struct ProjectFileModificationPoller : private Timer { ProjectFileModificationPoller (Project& p); + bool isCheckPending() const noexcept { return pending; } private: void timerCallback() override; @@ -523,7 +525,7 @@ private: void reloadProjectFromDisk(); Project& project; - bool showingWarning = false; + bool pending = false; }; //==============================================================================