From a7203c5d3f5bbc82f4438b1566d35e7c8c22b96c Mon Sep 17 00:00:00 2001 From: Leland Lucius Date: Sat, 16 May 2015 22:10:09 -0500 Subject: [PATCH] Fix crash when certain effects are open and a new project window is created This affected VST, LADSPA, LV2, and Audio Unit effects. --- src/PluginManager.cpp | 8 ++++++-- src/effects/EffectManager.cpp | 12 ++++++++++++ src/effects/EffectManager.h | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/PluginManager.cpp b/src/PluginManager.cpp index 181129f0c..e7c15f8c0 100644 --- a/src/PluginManager.cpp +++ b/src/PluginManager.cpp @@ -2190,6 +2190,8 @@ const PluginDescriptor *PluginManager::GetNextPlugin(PluginType type) const PluginDescriptor *PluginManager::GetFirstPluginForEffectType(EffectType type) { + EffectManager & em = EffectManager::Get(); + for (mPluginsIter = mPlugins.begin(); mPluginsIter != mPlugins.end(); ++mPluginsIter) { PluginDescriptor & plug = mPluginsIter->second; @@ -2198,7 +2200,7 @@ const PluginDescriptor *PluginManager::GetFirstPluginForEffectType(EffectType ty gPrefs->Read(plug.GetEffectFamily() + wxT("/Enable"), &familyEnabled, true); if (plug.IsValid() && plug.IsEnabled() && plug.GetEffectType() == type && familyEnabled) { - if (plug.IsInstantiated() && ((Effect *)plug.GetInstance())->IsHidden()) + if (plug.IsInstantiated() && em.IsHidden(plug.GetID())) { continue; } @@ -2212,6 +2214,8 @@ const PluginDescriptor *PluginManager::GetFirstPluginForEffectType(EffectType ty const PluginDescriptor *PluginManager::GetNextPluginForEffectType(EffectType type) { + EffectManager & em = EffectManager::Get(); + while (++mPluginsIter != mPlugins.end()) { PluginDescriptor & plug = mPluginsIter->second; @@ -2219,7 +2223,7 @@ const PluginDescriptor *PluginManager::GetNextPluginForEffectType(EffectType typ gPrefs->Read(plug.GetEffectFamily() + wxT("/Enable"), &familyEnabled, true); if (plug.IsValid() && plug.IsEnabled() && plug.GetEffectType() == type && familyEnabled) { - if (plug.IsInstantiated() && ((Effect *)plug.GetInstance())->IsHidden()) + if (plug.IsInstantiated() && em.IsHidden(plug.GetID())) { continue; } diff --git a/src/effects/EffectManager.cpp b/src/effects/EffectManager.cpp index e44009804..10b75f2f8 100644 --- a/src/effects/EffectManager.cpp +++ b/src/effects/EffectManager.cpp @@ -147,6 +147,18 @@ wxString EffectManager::GetEffectDescription(const PluginID & ID) return wxEmptyString; } +bool EffectManager::IsHidden(const PluginID & ID) +{ + Effect *effect = GetEffect(ID); + + if (effect) + { + return effect->IsHidden(); + } + + return false; +} + bool EffectManager::SupportsAutomation(const PluginID & ID) { const PluginDescriptor *plug = PluginManager::Get().GetPlugin(ID); diff --git a/src/effects/EffectManager.h b/src/effects/EffectManager.h index 00bb1a800..1eb3bd8e4 100644 --- a/src/effects/EffectManager.h +++ b/src/effects/EffectManager.h @@ -76,6 +76,7 @@ public: wxString GetEffectName(const PluginID & ID); wxString GetEffectIdentifier(const PluginID & ID); wxString GetEffectDescription(const PluginID & ID); + bool IsHidden(const PluginID & ID); /** Support for batch commands */ bool SupportsAutomation(const PluginID & ID);