Create and destroy (non-external) LV2 plugin UIs as window is shown/hidden.
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
This commit is contained in:
parent
a206c5c4a9
commit
d367b210f4
@ -118,8 +118,7 @@ LV2PluginUI::stop_updating(GdkEventAny*)
|
||||
{
|
||||
//cout << "stop_updating" << endl;
|
||||
|
||||
if ( //!_external_ui_ptr &&
|
||||
!_output_ports.empty()) {
|
||||
if (!_output_ports.empty()) {
|
||||
_screen_update_connection.disconnect();
|
||||
}
|
||||
return false;
|
||||
@ -146,13 +145,11 @@ LV2PluginUI::LV2PluginUI(boost::shared_ptr<PluginInsert> pi,
|
||||
boost::shared_ptr<LV2Plugin> lv2p)
|
||||
: PlugUIBase(pi)
|
||||
, _lv2(lv2p)
|
||||
, _gui_widget(NULL)
|
||||
, _values(NULL)
|
||||
, _external_ui_ptr(NULL)
|
||||
, _inst(NULL)
|
||||
{
|
||||
if (!_lv2->is_external_ui()) {
|
||||
lv2ui_instantiate("gtk2gui");
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -264,15 +261,16 @@ LV2PluginUI::lv2ui_instantiate(const std::string& title)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
@ -285,6 +283,21 @@ LV2PluginUI::~LV2PluginUI ()
|
||||
}
|
||||
#endif
|
||||
|
||||
_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()) {
|
||||
@ -362,6 +375,8 @@ LV2PluginUI::on_window_show(const std::string& title)
|
||||
_screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect
|
||||
(sigc::mem_fun(*this, &LV2PluginUI::output_update));
|
||||
return false;
|
||||
} else {
|
||||
lv2ui_instantiate("gtk2gui");
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -377,5 +392,7 @@ LV2PluginUI::on_window_hide()
|
||||
//slv2_ui_instance_get_descriptor(_inst)->cleanup(_inst);
|
||||
//_external_ui_ptr = NULL;
|
||||
//_screen_update_connection.disconnect();
|
||||
} else {
|
||||
lv2ui_free();
|
||||
}
|
||||
}
|
||||
|
@ -87,6 +87,7 @@ class LV2PluginUI : public PlugUIBase, public Gtk::VBox
|
||||
const void* buffer);
|
||||
|
||||
void lv2ui_instantiate(const std::string& title);
|
||||
void lv2ui_free();
|
||||
|
||||
void parameter_update(uint32_t, float);
|
||||
bool configure_handler (GdkEventConfigure*);
|
||||
|
Loading…
Reference in New Issue
Block a user