From c66955386ecfb86b3dd2b137a8e6e4143711f329 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 14 Nov 2011 17:41:29 +0000 Subject: 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 --- libs/ardour/ardour/plugin_manager.h | 8 ++++---- libs/ardour/globals.cc | 6 +++++- libs/ardour/plugin.cc | 12 ++++++------ libs/ardour/plugin_manager.cc | 15 ++++++++++++--- libs/ardour/rc_configuration.cc | 17 ++--------------- 5 files changed, 29 insertions(+), 29 deletions(-) (limited to 'libs') 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 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; } -- cgit v1.2.3