tentative fix for requesting driver+device list from backend
[ardour.git] / gtk2_ardour / lv2_plugin_ui.cc
index ed783b088665386fa1941b6bb9e17132ee2f2650..07e8699ebc25dbdfc4b5666415d74cb0d198db66 100644 (file)
@@ -116,10 +116,7 @@ LV2PluginUI::on_external_ui_closed(void* 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() */) {
-               // plugin is free()d in parent function - LV2PluginUI::output_update()
-               me->_external_ui_ptr = NULL;
-       }
+       me->_external_ui_ptr = NULL;
 }
 
 void
@@ -175,7 +172,7 @@ LV2PluginUI::output_update()
                        // clean up external UI if it closes itself via
                        // on_external_ui_closed() during run()
                        //printf("LV2PluginUI::output_update -- UI was closed\n");
-                       _screen_update_connection.disconnect();
+                       //_screen_update_connection.disconnect();
                        _message_update_connection.disconnect();
                        if (_inst) {
                                suil_instance_free((SuilInstance*)_inst);
@@ -374,7 +371,14 @@ LV2PluginUI::~LV2PluginUI ()
                delete[] _values;
        }
 
-       on_window_hide();
+       _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;
 }
 
 int
@@ -474,12 +478,13 @@ void
 LV2PluginUI::on_window_hide()
 {
        //printf("LV2PluginUI::on_window_hide\n");
-       _message_update_connection.disconnect();
 
        if (_lv2->is_external_ui()) {
                if (!_external_ui_ptr) { return; }
-               _screen_update_connection.disconnect();
                LV2_EXTERNAL_UI_HIDE(_external_ui_ptr);
+               if (!_lv2->is_external_kx()) { return ; }
+               _message_update_connection.disconnect();
+               _screen_update_connection.disconnect();
                _external_ui_ptr = NULL;
                suil_instance_free((SuilInstance*)_inst);
                _inst = NULL;