avoid listing duplicate LXVST plugins that are discovered along LXVST_PATH or otherwi...
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 13 Oct 2011 18:40:47 +0000 (18:40 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 13 Oct 2011 18:40:47 +0000 (18:40 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@10208 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/plugin_manager.cc

index 613fc85c6d6bd983628bad77c6f438547b1a0164..7072e073ba5d1f06c36eb793d1ee9ac429a6cc6d 100644 (file)
@@ -719,6 +719,22 @@ PluginManager::lxvst_discover (string path)
        info->n_outputs.set_audio (finfo->numOutputs);
        info->n_inputs.set_midi (finfo->wantMidi ? 1 : 0);
        info->type = ARDOUR::LXVST;
+
+        /* Make sure we don't find the same plugin in more than one place along
+          the LXVST_PATH We can't use a simple 'find' because the path is included
+          in the PluginInfo, and that is the one thing we can be sure MUST be
+          different if a duplicate instance is found.  So we just compare the type
+          and unique ID (which for some VSTs isn't actually unique...)
+       */
+       
+       if (!_lxvst_plugin_info->empty()) {
+               for (PluginInfoList::iterator i =_lxvst_plugin_info->begin(); i != _lxvst_plugin_info->end(); ++i) {
+                       if ((info->type == (*i)->type)&&(info->unique_id == (*i)->unique_id)) {
+                               vstfx_free_info(finfo);
+                               return 0;
+                       }
+               }
+       }
        
        _lxvst_plugin_info->push_back (info);
        vstfx_free_info (finfo);