diff --git a/extras/Projucer/Source/Application/jucer_MainWindow.cpp b/extras/Projucer/Source/Application/jucer_MainWindow.cpp index 2f2b7c2c18..10079fb25e 100644 --- a/extras/Projucer/Source/Application/jucer_MainWindow.cpp +++ b/extras/Projucer/Source/Application/jucer_MainWindow.cpp @@ -39,9 +39,9 @@ class BlurOverlayWithComponent : public Component, { public: BlurOverlayWithComponent (MainWindow& window, std::unique_ptr comp) - : ComponentMovementWatcher (&window), - mainWindow (window), - componentToShow (std::move (comp)) + : ComponentMovementWatcher (&window), + mainWindow (window), + componentToShow (std::move (comp)) { kernel.createGaussianBlur (1.25f); @@ -326,6 +326,11 @@ void MainWindow::setProject (std::unique_ptr newProject) getProjectContentComponent()->setProject (currentProject.get()); } + if (currentProject != nullptr) + currentProject->addChangeListener (this); + + changeListenerCallback (currentProject.get()); + projectNameValue.referTo (currentProject != nullptr ? currentProject->getProjectValue (Ids::name) : Value()); initialiseProjectWindow(); @@ -707,6 +712,16 @@ void MainWindow::valueChanged (Value& value) : "Projucer"); } +void MainWindow::changeListenerCallback (ChangeBroadcaster* source) +{ + auto* project = getProject(); + + if (source == project) + if (auto* peer = getPeer()) + peer->setHasChangedSinceSaved (project != nullptr ? project->hasChangedSinceSaved() + : false); +} + //============================================================================== MainWindowList::MainWindowList() { diff --git a/extras/Projucer/Source/Application/jucer_MainWindow.h b/extras/Projucer/Source/Application/jucer_MainWindow.h index ac63ac0e40..0bb11cce25 100644 --- a/extras/Projucer/Source/Application/jucer_MainWindow.h +++ b/extras/Projucer/Source/Application/jucer_MainWindow.h @@ -39,7 +39,8 @@ class MainWindow : public DocumentWindow, public ApplicationCommandTarget, public FileDragAndDropTarget, public DragAndDropContainer, - private Value::Listener + private Value::Listener, + private ChangeListener { public: //============================================================================== @@ -87,6 +88,7 @@ public: StringArray& files, bool& canMoveFiles) override; private: void valueChanged (Value&) override; + void changeListenerCallback (ChangeBroadcaster* source) override; static const char* getProjectWindowPosName() { return "projectWindowPos"; } void createProjectContentCompIfNeeded();