diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-08-22 16:25:45 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-08-22 16:25:45 +0000 |
commit | 43bcb7f72b8ea64bab7861ff24d488d4d09a7293 (patch) | |
tree | 70a2d6e12d60242d7a2c9716eca817d2bb0b87ff /gtk2_ardour/lv2_plugin_ui.cc | |
parent | 067c4458a0ade1ae95f031c98a0ab7b3a349a74f (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.cc | 45 |
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 |