summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-11-14 17:41:29 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-11-14 17:41:29 +0000
commitc66955386ecfb86b3dd2b137a8e6e4143711f329 (patch)
tree5da85b4fcf3b6c0c4c8cf2f4a49d2ed1eb88a147 /libs
parent28f328e09c6227ab6248c91ae0690a02d9d23300 (diff)
make PluginManager API more in line with other singletons; do initial plugin discovery before beginning to construct the UI, so that if plugins create GUIs (e.g for license verification) they don't cause a run loop to catch the UIManager in an inconsistent state with menus defined but actions missing
git-svn-id: svn://localhost/ardour2/branches/3.0@10586 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/plugin_manager.h8
-rw-r--r--libs/ardour/globals.cc6
-rw-r--r--libs/ardour/plugin.cc12
-rw-r--r--libs/ardour/plugin_manager.cc15
-rw-r--r--libs/ardour/rc_configuration.cc17
5 files changed, 29 insertions, 29 deletions
diff --git a/libs/ardour/ardour/plugin_manager.h b/libs/ardour/ardour/plugin_manager.h
index ae534837ce..3c5ae5e18a 100644
--- a/libs/ardour/ardour/plugin_manager.h
+++ b/libs/ardour/ardour/plugin_manager.h
@@ -39,7 +39,8 @@ class Plugin;
class PluginManager : public boost::noncopyable {
public:
- PluginManager ();
+ static PluginManager& instance();
+
~PluginManager ();
ARDOUR::PluginInfoList &vst_plugin_info ();
@@ -54,8 +55,6 @@ class PluginManager : public boost::noncopyable {
int add_vst_directory (std::string dirpath);
int add_lxvst_directory (std::string dirpath);
- static PluginManager* the_manager() { return _manager; }
-
enum PluginStatusType {
Normal = 0,
Favorite,
@@ -134,7 +133,8 @@ class PluginManager : public boost::noncopyable {
std::string get_ladspa_category (uint32_t id);
std::vector<uint32_t> ladspa_plugin_whitelist;
- static PluginManager* _manager; // singleton
+ static PluginManager* _instance; // singleton
+ PluginManager ();
};
} /* namespace ARDOUR */
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index 0a4ec4cab3..f1a0f71847 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -334,7 +334,7 @@ ARDOUR::init (bool use_vst, bool try_optimization)
Analyser::init ();
/* singleton - first object is "it" */
- new PluginManager ();
+ (void) PluginManager::instance();
ProcessThread::init ();
BufferManager::init (10); // XX should be num_processors_for_dsp + 1 for the GUI thread
@@ -374,6 +374,10 @@ ARDOUR::init_post_engine ()
if ((node = Config->control_protocol_state()) != 0) {
ControlProtocolManager::instance().set_state (*node, Stateful::loading_state_version);
}
+
+ /* find plugins */
+
+ ARDOUR::PluginManager::instance().refresh ();
}
int
diff --git a/libs/ardour/plugin.cc b/libs/ardour/plugin.cc
index 21ad91ff0e..bf22de6c6c 100644
--- a/libs/ardour/plugin.cc
+++ b/libs/ardour/plugin.cc
@@ -119,35 +119,35 @@ Plugin::save_preset (string name)
PluginPtr
ARDOUR::find_plugin(Session& session, string identifier, PluginType type)
{
- PluginManager *mgr = PluginManager::the_manager();
+ PluginManager& mgr (PluginManager::instance());
PluginInfoList plugs;
switch (type) {
case ARDOUR::LADSPA:
- plugs = mgr->ladspa_plugin_info();
+ plugs = mgr.ladspa_plugin_info();
break;
#ifdef LV2_SUPPORT
case ARDOUR::LV2:
- plugs = mgr->lv2_plugin_info();
+ plugs = mgr.lv2_plugin_info();
break;
#endif
#ifdef VST_SUPPORT
case ARDOUR::VST:
- plugs = mgr->vst_plugin_info();
+ plugs = mgr.vst_plugin_info();
break;
#endif
#ifdef LXVST_SUPPORT
case ARDOUR::LXVST:
- plugs = mgr->lxvst_plugin_info();
+ plugs = mgr.lxvst_plugin_info();
break;
#endif
#ifdef AUDIOUNIT_SUPPORT
case ARDOUR::AudioUnit:
- plugs = mgr->au_plugin_info();
+ plugs = mgr.au_plugin_info();
break;
#endif
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index cc0fd554d5..d15f48e5f3 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -81,7 +81,16 @@ using namespace ARDOUR;
using namespace PBD;
using namespace std;
-PluginManager* PluginManager::_manager = 0;
+PluginManager* PluginManager::_instance = 0;
+
+PluginManager&
+PluginManager::instance()
+{
+ if (!_instance) {
+ _instance = new PluginManager;
+ }
+ return *_instance;
+}
PluginManager::PluginManager ()
: _vst_plugin_info(0)
@@ -133,8 +142,8 @@ PluginManager::PluginManager ()
lxvst_path = s;
}
- if (_manager == 0) {
- _manager = this;
+ if (_instance == 0) {
+ _instance = this;
}
/* the plugin manager is constructed too early to use Profile */
diff --git a/libs/ardour/rc_configuration.cc b/libs/ardour/rc_configuration.cc
index c4417b376e..8c4650b2e6 100644
--- a/libs/ardour/rc_configuration.cc
+++ b/libs/ardour/rc_configuration.cc
@@ -78,18 +78,12 @@ RCConfiguration::~RCConfiguration ()
int
RCConfiguration::load_state ()
{
- bool found = false;
-
sys::path system_rc_file;
struct stat statbuf;
/* load system configuration first */
- if (find_file_in_search_path (ardour_search_path() + system_config_search_path(),
- "ardour_system.rc", system_rc_file) )
- {
- found = true;
-
+ if (find_file_in_search_path (ardour_search_path() + system_config_search_path(), "ardour_system.rc", system_rc_file)) {
string rcfile = system_rc_file.to_string();
/* stupid XML Parser hates empty files */
@@ -120,11 +114,7 @@ RCConfiguration::load_state ()
sys::path user_rc_file;
- if (find_file_in_search_path (ardour_search_path() + user_config_directory(),
- "ardour.rc", user_rc_file))
- {
- found = true;
-
+ if (find_file_in_search_path (ardour_search_path() + user_config_directory(), "ardour.rc", user_rc_file)) {
string rcfile = user_rc_file.to_string();
/* stupid XML parser hates empty files */
@@ -151,9 +141,6 @@ RCConfiguration::load_state ()
}
}
- if (!found)
- error << string_compose (_("%1: could not find configuration file (ardour.rc), canvas will look broken."), PROGRAM_NAME) << endmsg;
-
return 0;
}