Don't ever clean up external UI plugins that use the LV2plug.in URI.
only free the memory of the last instance when the plugin is removed
or ardour closes.
{
//printf("LV2PluginUI::on_external_ui_closed\n");
LV2PluginUI* me = (LV2PluginUI*)controller;
{
//printf("LV2PluginUI::on_external_ui_closed\n");
LV2PluginUI* me = (LV2PluginUI*)controller;
- me->_screen_update_connection.disconnect();
if (me->_lv2->is_external_kx() /* called from plugin's UI_RUN() */) {
if (me->_lv2->is_external_kx() /* called from plugin's UI_RUN() */) {
+ me->_screen_update_connection.disconnect();
// plugin is free()d in parent function - LV2PluginUI::output_update()
me->_external_ui_ptr = NULL;
}
// plugin is free()d in parent function - LV2PluginUI::output_update()
me->_external_ui_ptr = NULL;
}
+ _message_update_connection.disconnect();
+ _screen_update_connection.disconnect();
+
+ if (_external_ui_ptr && _lv2->is_external_kx()) {
+ LV2_EXTERNAL_UI_HIDE(_external_ui_ptr);
+ }
+ lv2ui_free();
+ _external_ui_ptr = NULL;
if (_lv2->is_external_ui()) {
if (!_external_ui_ptr) { return; }
if (_lv2->is_external_ui()) {
if (!_external_ui_ptr) { return; }
+ if (!_lv2->is_external_kx()) { return ; }
_screen_update_connection.disconnect();
LV2_EXTERNAL_UI_HIDE(_external_ui_ptr);
_external_ui_ptr = NULL;
_screen_update_connection.disconnect();
LV2_EXTERNAL_UI_HIDE(_external_ui_ptr);
_external_ui_ptr = NULL;