From 7d36760efd153bb7147cd13940d8f77ac8c25558 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 9 Apr 2018 10:42:57 +0100 Subject: [PATCH] PIPs: Changed the Component Main.cpp wrapper to avoid a crash that would happen on quit when using the live-build engine on Windows --- extras/Projucer/JuceLibraryCode/BinaryData.cpp | 16 ++++++++++------ extras/Projucer/JuceLibraryCode/BinaryData.h | 2 +- .../BinaryData/Templates/jucer_PIPMain.cpp | 14 +++++++++----- .../Source/Utility/PIPs/jucer_PIPGenerator.cpp | 2 +- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.cpp b/extras/Projucer/JuceLibraryCode/BinaryData.cpp index 6f6d79f4a5..a143ceafbf 100644 --- a/extras/Projucer/JuceLibraryCode/BinaryData.cpp +++ b/extras/Projucer/JuceLibraryCode/BinaryData.cpp @@ -7193,10 +7193,11 @@ static const unsigned char temp_binary_data_53[] = " class MainWindow : public DocumentWindow\r\n" " {\r\n" " public:\r\n" -" MainWindow (const String& name, Component* c) : DocumentWindow (name,\r\n" -" Desktop::getInstance().getDefaultLookAndFeel()\r\n" -" .findColour (ResizableWindow::backgroundColourId),\r\n" -" DocumentWindow::allButtons)\r\n" +" MainWindow (const String& name, Component* c, JUCEApplication& a)\r\n" +" : DocumentWindow (name, Desktop::getInstance().getDefaultLookAndFeel()\r\n" +" .findColour (ResizableWindow::backgroundColourId),\r\n" +" DocumentWindow::allButtons),\r\n" +" app (a)\r\n" " {\r\n" " setUsingNativeTitleBar (true);\r\n" " setContentOwned (c, true);\r\n" @@ -7214,10 +7215,13 @@ static const unsigned char temp_binary_data_53[] = "\r\n" " void closeButtonPressed() override\r\n" " {\r\n" -" JUCEApplication::getInstance()->systemRequestedQuit();\r\n" +" app.systemRequestedQuit();\r\n" " }\r\n" "\r\n" " private:\r\n" +" JUCEApplication& app;\r\n" +"\r\n" +" //==============================================================================\r\n" " JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)\r\n" " };\r\n" " ScopedPointer mainWindow;\r\n" @@ -7641,7 +7645,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) noexc case 0x7fbac252: numBytes = 1665; return jucer_OpenGLComponentTemplate_cpp; case 0x491fa0d7: numBytes = 1263; return jucer_OpenGLComponentTemplate_h; case 0xbc050edc: numBytes = 4926; return jucer_PIPAudioProcessorTemplate_h; - case 0xf4ca9e9a: numBytes = 2446; return jucer_PIPMain_cpp; + case 0xf4ca9e9a: numBytes = 2443; return jucer_PIPMain_cpp; case 0x0b16e320: numBytes = 517; return jucer_PIPTemplate_h; case 0x763d39dc: numBytes = 1050; return colourscheme_dark_xml; case 0xe8b08520: numBytes = 1050; return colourscheme_light_xml; diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.h b/extras/Projucer/JuceLibraryCode/BinaryData.h index 524580e183..4c0adcd9b3 100644 --- a/extras/Projucer/JuceLibraryCode/BinaryData.h +++ b/extras/Projucer/JuceLibraryCode/BinaryData.h @@ -168,7 +168,7 @@ namespace BinaryData const int jucer_PIPAudioProcessorTemplate_hSize = 4926; extern const char* jucer_PIPMain_cpp; - const int jucer_PIPMain_cppSize = 2446; + const int jucer_PIPMain_cppSize = 2443; extern const char* jucer_PIPTemplate_h; const int jucer_PIPTemplate_hSize = 517; diff --git a/extras/Projucer/Source/BinaryData/Templates/jucer_PIPMain.cpp b/extras/Projucer/Source/BinaryData/Templates/jucer_PIPMain.cpp index 9a7b025a66..36763f82cd 100644 --- a/extras/Projucer/Source/BinaryData/Templates/jucer_PIPMain.cpp +++ b/extras/Projucer/Source/BinaryData/Templates/jucer_PIPMain.cpp @@ -26,10 +26,11 @@ private: class MainWindow : public DocumentWindow { public: - MainWindow (const String& name, Component* c) : DocumentWindow (name, - Desktop::getInstance().getDefaultLookAndFeel() - .findColour (ResizableWindow::backgroundColourId), - DocumentWindow::allButtons) + MainWindow (const String& name, Component* c, JUCEApplication& a) + : DocumentWindow (name, Desktop::getInstance().getDefaultLookAndFeel() + .findColour (ResizableWindow::backgroundColourId), + DocumentWindow::allButtons), + app (a) { setUsingNativeTitleBar (true); setContentOwned (c, true); @@ -47,10 +48,13 @@ private: void closeButtonPressed() override { - JUCEApplication::getInstance()->systemRequestedQuit(); + app.systemRequestedQuit(); } private: + JUCEApplication& app; + + //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) }; ScopedPointer mainWindow; diff --git a/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp b/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp index c02b6ab27f..7256548a3f 100644 --- a/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp +++ b/extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp @@ -512,7 +512,7 @@ String PIPGenerator::getMainFileTextForType() mainTemplate = mainTemplate.replace ("%%project_version%%", metadata[Ids::version].toString()); return ensureCorrectWhitespace (mainTemplate.replace ("%%startup%%", "mainWindow = new MainWindow (" + metadata[Ids::name].toString().quoted() - + ", new " + metadata[Ids::mainClass].toString() + "());") + + ", new " + metadata[Ids::mainClass].toString() + "(), *this);") .replace ("%%shutdown%%", "mainWindow = nullptr;")); } else if (type == "AudioProcessor")