| @@ -38,6 +38,14 @@ | |||||
| #include "juce_audio_basics.h" | #include "juce_audio_basics.h" | ||||
| #if defined(CARLA_OS_MAC) || defined(CARLA_OS_WIN) | |||||
| # include "juce_gui_basics.h" | |||||
| #else | |||||
| namespace juce { | |||||
| # include "juce_events/messages/juce_Initialisation.h" | |||||
| } // namespace juce | |||||
| #endif | |||||
| using juce::File; | using juce::File; | ||||
| using juce::FloatVectorOperations; | using juce::FloatVectorOperations; | ||||
| using juce::MemoryOutputStream; | using juce::MemoryOutputStream; | ||||
| @@ -46,6 +54,9 @@ using juce::String; | |||||
| using juce::XmlDocument; | using juce::XmlDocument; | ||||
| using juce::XmlElement; | using juce::XmlElement; | ||||
| static bool gNeedsJuceHandling = false; | |||||
| static int gJuceReferenceCounter = 0; | |||||
| CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
| // ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
| @@ -561,6 +572,11 @@ public: | |||||
| { | { | ||||
| carla_debug("CarlaEngineNative::CarlaEngineNative()"); | carla_debug("CarlaEngineNative::CarlaEngineNative()"); | ||||
| CARLA_SAFE_ASSERT_INT(gJuceReferenceCounter >= 0, gJuceReferenceCounter); | |||||
| if (gNeedsJuceHandling && ++gJuceReferenceCounter == 1) | |||||
| juce::initialiseJuce_GUI(); | |||||
| carla_zeroChar(fTmpBuf, STR_MAX+1); | carla_zeroChar(fTmpBuf, STR_MAX+1); | ||||
| // set-up engine | // set-up engine | ||||
| @@ -610,6 +626,9 @@ public: | |||||
| pData->graph.destroy(); | pData->graph.destroy(); | ||||
| if (gNeedsJuceHandling && --gJuceReferenceCounter == 0) | |||||
| juce::shutdownJuce_GUI(); | |||||
| carla_debug("CarlaEngineNative::~CarlaEngineNative() - END"); | carla_debug("CarlaEngineNative::~CarlaEngineNative() - END"); | ||||
| } | } | ||||
| @@ -1583,6 +1602,9 @@ CARLA_EXPORT | |||||
| const NativePluginDescriptor* carla_get_native_rack_plugin(); | const NativePluginDescriptor* carla_get_native_rack_plugin(); | ||||
| const NativePluginDescriptor* carla_get_native_rack_plugin() | const NativePluginDescriptor* carla_get_native_rack_plugin() | ||||
| { | { | ||||
| // if this is called then we're running as special plugin | |||||
| gNeedsJuceHandling = true; | |||||
| CARLA_BACKEND_USE_NAMESPACE; | CARLA_BACKEND_USE_NAMESPACE; | ||||
| return &carlaRackDesc; | return &carlaRackDesc; | ||||
| } | } | ||||
| @@ -1591,6 +1613,9 @@ CARLA_EXPORT | |||||
| const NativePluginDescriptor* carla_get_native_patchbay_plugin(); | const NativePluginDescriptor* carla_get_native_patchbay_plugin(); | ||||
| const NativePluginDescriptor* carla_get_native_patchbay_plugin() | const NativePluginDescriptor* carla_get_native_patchbay_plugin() | ||||
| { | { | ||||
| // if this is called then we're running as special plugin | |||||
| gNeedsJuceHandling = true; | |||||
| CARLA_BACKEND_USE_NAMESPACE; | CARLA_BACKEND_USE_NAMESPACE; | ||||
| return &carlaPatchbayDesc; | return &carlaPatchbayDesc; | ||||
| } | } | ||||