summaryrefslogtreecommitdiff
path: root/gtk2_ardour/plugin_selector.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/plugin_selector.cc')
-rw-r--r--gtk2_ardour/plugin_selector.cc31
1 files changed, 24 insertions, 7 deletions
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index f50c97e417..cf43422f4f 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -70,10 +70,14 @@ PluginSelector::PluginSelector (PluginManager *mgr)
set_name ("PluginSelectorWindow");
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
+ _plugin_menu = 0;
manager = mgr;
session = 0;
in_row_change = false;
+ manager->PluginListChanged.connect (mem_fun (*this, &PluginSelector::build_plugin_menu));
+ build_plugin_menu ();
+
plugin_model = Gtk::ListStore::create (plugin_columns);
plugin_display.set_model (plugin_model);
/* XXX translators: try to convert "Fav" into a short term
@@ -189,6 +193,11 @@ PluginSelector::PluginSelector (PluginManager *mgr)
refill ();
}
+PluginSelector::~PluginSelector ()
+{
+ delete _plugin_menu;
+}
+
void
PluginSelector::row_clicked(GdkEventButton* event)
{
@@ -562,10 +571,16 @@ struct PluginMenuCompareByCategory {
}
};
-/** @return a Gtk::manage()d menu */
+/** @return Plugin menu. The caller should not delete it */
Gtk::Menu*
PluginSelector::plugin_menu()
{
+ return _plugin_menu;
+}
+
+void
+PluginSelector::build_plugin_menu ()
+{
PluginInfoList all_plugs;
all_plugs.insert (all_plugs.end(), manager->ladspa_plugin_info().begin(), manager->ladspa_plugin_info().end());
@@ -581,10 +596,12 @@ PluginSelector::plugin_menu()
using namespace Menu_Helpers;
- Menu* menu = manage (new Menu());
- menu->set_name("ArdourContextMenu");
-
- MenuList& items = menu->items();
+ delete _plugin_menu;
+
+ _plugin_menu = new Menu;
+ _plugin_menu->set_name("ArdourContextMenu");
+
+ MenuList& items = _plugin_menu->items();
items.clear ();
Gtk::Menu* favs = create_favs_menu(all_plugs);
@@ -598,8 +615,6 @@ PluginSelector::plugin_menu()
Menu* by_category = create_by_category_menu(all_plugs);
items.push_back (MenuElem (_("By Category"), *manage (by_category)));
-
- return menu;
}
Gtk::Menu*
@@ -742,6 +757,8 @@ PluginSelector::favorite_changed (const Glib::ustring& path)
manager->set_status (pi->type, pi->unique_id, status);
manager->save_statuses ();
+
+ build_plugin_menu ();
}
in_row_change = false;
}