Fixes ticket #4067 (not to mention avoids having every UI that has ever been shown loaded in memory until exit time...)
git-svn-id: svn://localhost/ardour2/branches/3.0@9638
d708f5d6-7413-0410-9779-
e7cbd77b26cf
{
//cout << "stop_updating" << endl;
{
//cout << "stop_updating" << endl;
- if ( //!_external_ui_ptr &&
- !_output_ports.empty()) {
+ if (!_output_ports.empty()) {
_screen_update_connection.disconnect();
}
return false;
_screen_update_connection.disconnect();
}
return false;
boost::shared_ptr<LV2Plugin> lv2p)
: PlugUIBase(pi)
, _lv2(lv2p)
boost::shared_ptr<LV2Plugin> lv2p)
: PlugUIBase(pi)
, _lv2(lv2p)
, _values(NULL)
, _external_ui_ptr(NULL)
, _inst(NULL)
{
, _values(NULL)
, _external_ui_ptr(NULL)
, _inst(NULL)
{
- if (!_lv2->is_external_ui()) {
- lv2ui_instantiate("gtk2gui");
- }
-LV2PluginUI::~LV2PluginUI ()
+void
+LV2PluginUI::lv2ui_free()
- //cout << "LV2PluginUI destructor called" << endl;
-
- if (_values) {
- delete[] _values;
+ if (_lv2->is_external_ui() || !_gui_widget) {
+ return;
- /* Close and delete GUI. */
+ stop_updating(NULL);
+ remove(*_gui_widget);
+
#ifdef HAVE_SUIL
suil_instance_free((SuilInstance*)_inst);
#else
#ifdef HAVE_SUIL
suil_instance_free((SuilInstance*)_inst);
#else
+ _inst = NULL;
+ _gui_widget = NULL;
+}
+
+LV2PluginUI::~LV2PluginUI ()
+{
+ //cout << "LV2PluginUI destructor called" << endl;
+
+ if (_values) {
+ delete[] _values;
+ }
+
+ /* Close and delete GUI. */
+ lv2ui_free();
+
_screen_update_connection.disconnect();
if (_lv2->is_external_ui()) {
_screen_update_connection.disconnect();
if (_lv2->is_external_ui()) {
_screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect
(sigc::mem_fun(*this, &LV2PluginUI::output_update));
return false;
_screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect
(sigc::mem_fun(*this, &LV2PluginUI::output_update));
return false;
+ } else {
+ lv2ui_instantiate("gtk2gui");
//slv2_ui_instance_get_descriptor(_inst)->cleanup(_inst);
//_external_ui_ptr = NULL;
//_screen_update_connection.disconnect();
//slv2_ui_instance_get_descriptor(_inst)->cleanup(_inst);
//_external_ui_ptr = NULL;
//_screen_update_connection.disconnect();
+ } else {
+ lv2ui_free();
const void* buffer);
void lv2ui_instantiate(const std::string& title);
const void* buffer);
void lv2ui_instantiate(const std::string& title);
void parameter_update(uint32_t, float);
bool configure_handler (GdkEventConfigure*);
void parameter_update(uint32_t, float);
bool configure_handler (GdkEventConfigure*);