summaryrefslogtreecommitdiff
path: root/gtk2_ardour/lv2_plugin_ui.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-22 16:25:45 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-22 16:25:45 +0000
commit43bcb7f72b8ea64bab7861ff24d488d4d09a7293 (patch)
tree70a2d6e12d60242d7a2c9716eca817d2bb0b87ff /gtk2_ardour/lv2_plugin_ui.cc
parent067c4458a0ade1ae95f031c98a0ab7b3a349a74f (diff)
LV2 external GUI fixes forward ported from 2.x
git-svn-id: svn://localhost/ardour2/branches/3.0@7666 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/lv2_plugin_ui.cc')
-rw-r--r--gtk2_ardour/lv2_plugin_ui.cc45
1 files changed, 17 insertions, 28 deletions
diff --git a/gtk2_ardour/lv2_plugin_ui.cc b/gtk2_ardour/lv2_plugin_ui.cc
index 6a6870301d..bdd02773df 100644
--- a/gtk2_ardour/lv2_plugin_ui.cc
+++ b/gtk2_ardour/lv2_plugin_ui.cc
@@ -29,22 +29,6 @@ using namespace Gtk;
using namespace ARDOUR;
using namespace PBD;
-std::vector<struct lv2_external_ui*> g_external_uis;
-
-void close_external_ui_windows()
-{
- struct lv2_external_ui* external_ui_ptr;
-
- //cout << "close_external_ui_windows" << endl;
-
- while (!g_external_uis.empty()) {
- //cout << "pop" << endl;
- external_ui_ptr = g_external_uis.back();
- LV2_EXTERNAL_UI_HIDE(external_ui_ptr);
- g_external_uis.pop_back();
- }
-}
-
void
LV2PluginUI::lv2_ui_write(
LV2UI_Controller controller,
@@ -63,19 +47,8 @@ LV2PluginUI::lv2_ui_write(
void LV2PluginUI::on_external_ui_closed(LV2UI_Controller controller)
{
- //cout << "on_external_ui_closed" << endl;
-
LV2PluginUI* me = (LV2PluginUI*)controller;
me->_screen_update_connection.disconnect();
- //me->insert->set_gui(0);
-
- for (std::vector<struct lv2_external_ui*>::iterator it = g_external_uis.begin() ; it < g_external_uis.end(); it++) {
- if (*it == me->_external_ui_ptr) {
- g_external_uis.erase(it);
- }
- }
-
- //slv2_ui_instance_get_descriptor(me->_inst)->cleanup(me->_inst);
me->_external_ui_ptr = NULL;
}
@@ -212,7 +185,6 @@ LV2PluginUI::lv2ui_instantiate(const Glib::ustring& title)
pack_start(*_gui_widget, true, true);
} else {
_external_ui_ptr = (struct lv2_external_ui *)slv2_ui_instance_get_widget(_inst);
- g_external_uis.push_back(_external_ui_ptr);
}
}
@@ -239,6 +211,23 @@ LV2PluginUI::~LV2PluginUI ()
delete[] _values;
}
// plugin destructor destroys the GTK GUI
+
+
+ const LV2UI_Descriptor* ui_desc = slv2_ui_instance_get_descriptor(_inst);
+ LV2UI_Handle ui_handle = slv2_ui_instance_get_handle(_inst);
+
+ /*Call cleanup to tell the plugin to close its GUI and delete it*/
+
+ if (ui_desc) {
+ ui_desc->cleanup(ui_handle);
+ }
+
+ _screen_update_connection.disconnect();
+
+ if (_lv2->is_external_ui()) {
+ /*external UI is no longer valid - on_window_hide() will not try to use it if is NULL*/
+ _external_ui_ptr = NULL;
+ }
}
int