Fix external UIs (e.g. Calf git).
authorDavid Robillard <d@drobilla.net>
Thu, 28 Apr 2011 15:36:51 +0000 (15:36 +0000)
committerDavid Robillard <d@drobilla.net>
Thu, 28 Apr 2011 15:36:51 +0000 (15:36 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9442 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/lv2_plugin_ui.cc
gtk2_ardour/lv2_plugin_ui.h
libs/ardour/lv2_plugin.cc

index 8cd3382ad1744068113409a595b20f4495c42742..cd43f410f4473e883d8f0d0f65c5166a65d2441d 100644 (file)
@@ -33,8 +33,7 @@ using namespace ARDOUR;
 using namespace PBD;
 
 #if defined(HAVE_NEW_SLV2) && defined(HAVE_SUIL)
-SuilHost* LV2PluginUI::ui_host  = NULL;
-SLV2Value LV2PluginUI::ui_GtkUI = NULL;
+SuilHost* LV2PluginUI::ui_host = NULL;
 #endif
 
 void
@@ -178,17 +177,17 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
 
 #if defined(HAVE_NEW_SLV2) && defined(HAVE_SUIL)
        if (!LV2PluginUI::ui_host) {
-               LV2PluginUI::ui_GtkUI = slv2_value_new_uri(
-                       ARDOUR::PluginManager::the_manager()->lv2_world()->world,
-                       "http://lv2plug.in/ns/extensions/ui#GtkUI");
                LV2PluginUI::ui_host = suil_host_new(
                LV2PluginUI::lv2_ui_write, NULL, NULL, NULL);
        }
+       LV2World* lv2_world      = ARDOUR::PluginManager::the_manager()->lv2_world();
+       SLV2Value container_type = (is_external_ui)
+               ? lv2_world->external_gui : lv2_world->gtk_gui;
        SLV2UI ui = _lv2->slv2_ui();
        _inst = suil_instance_new(
                LV2PluginUI::ui_host,
                this,
-               slv2_value_as_uri(ui_GtkUI),
+               slv2_value_as_uri(container_type),
                slv2_value_as_uri(slv2_plugin_get_uri(_lv2->slv2_plugin())),
                slv2_value_as_uri(slv2_ui_get_uri(ui)),
                slv2_value_as_uri(_lv2->ui_type()),
index 5eacff14cc80a283693b8c5801a9c5fdb9919f15..ccbd177f56beb6c52f2f36c95b2b093753b1572b 100644 (file)
@@ -84,6 +84,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
 #if defined(HAVE_NEW_SLV2) && defined(HAVE_SUIL)
        static SuilHost* ui_host;
        static SLV2Value ui_GtkUI;
+       static SLV2Value ui_external;
 
        SuilInstance* _inst;
 #else
index eef3e3065dfe7fb90da4d7436f36070cb515f4b9..67fbd97c321e43e05575bd22f632b6a7f1036333 100644 (file)
@@ -211,13 +211,15 @@ LV2Plugin::init(LV2World& world, SLV2Plugin plugin, framecnt_t rate)
                // Look for embeddable UI
                SLV2Value ui_type = NULL;
                SLV2_FOREACH(uis, u, uis) {
-                       SLV2UI this_ui = slv2_uis_get(uis, u);
+                       SLV2UI    this_ui      = slv2_uis_get(uis, u);
+                       SLV2Value this_ui_type = NULL;
                        if (slv2_ui_is_supported(this_ui,
                                                 suil_ui_supported,
                                                 _world.gtk_gui,
-                                                &_ui_type)) {
+                                                &this_ui_type)) {
                                // TODO: Multiple UI support
-                               _ui = this_ui;
+                               _ui      = this_ui;
+                               _ui_type = this_ui_type;
                                break;
                        } 
                }
@@ -226,7 +228,8 @@ LV2Plugin::init(LV2World& world, SLV2Plugin plugin, framecnt_t rate)
                for (unsigned i = 0; i < slv2_uis_size(uis); ++i) {
                        SLV2UI ui = slv2_uis_get_at(uis, i);
                        if (slv2_ui_is_a(ui, _world.gtk_gui)) {
-                               _ui = ui;
+                               _ui      = ui;
+                               _ui_type = _world.gtk_gui;
                                break;
                        }
                }
@@ -238,6 +241,7 @@ LV2Plugin::init(LV2World& world, SLV2Plugin plugin, framecnt_t rate)
                                SLV2UI ui = slv2_uis_get_at(uis, i);
                                if (slv2_ui_is_a(ui, _world.external_gui)) {
                                        _ui = ui;
+                                       _ui_type = _world.external_gui;
                                        break;
                                }
                        }