summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/mixer_ui.cc7
-rw-r--r--gtk2_ardour/plugin_selector.cc31
-rw-r--r--gtk2_ardour/plugin_selector.h3
3 files changed, 29 insertions, 12 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 0d3f42c1d5..9d918d4e3b 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -63,7 +63,6 @@ using PBD::atoi;
Mixer_UI::Mixer_UI ()
: Window (Gtk::WINDOW_TOPLEVEL)
- , _plugin_selector (0)
{
session = 0;
_strip_width = Config->get_default_narrow_ms() ? Narrow : Wide;
@@ -252,6 +251,8 @@ Mixer_UI::Mixer_UI ()
group_display.show();
auto_rebinding = FALSE;
+
+ _plugin_selector = new PluginSelector (PluginManager::the_manager ());
}
Mixer_UI::~Mixer_UI ()
@@ -1554,9 +1555,5 @@ Mixer_UI::set_route_group_activation (RouteGroup* g, bool a)
PluginSelector*
Mixer_UI::plugin_selector()
{
- if (!_plugin_selector) {
- _plugin_selector = new PluginSelector (PluginManager::the_manager());
- _plugin_selector->set_session (session);
- }
return _plugin_selector;
}
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;
}
diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h
index 824fbf8207..06e746853f 100644
--- a/gtk2_ardour/plugin_selector.h
+++ b/gtk2_ardour/plugin_selector.h
@@ -37,6 +37,7 @@ class PluginSelector : public ArdourDialog
{
public:
PluginSelector (ARDOUR::PluginManager *);
+ ~PluginSelector ();
void set_interested_object (PluginInterestedObject&);
@@ -114,6 +115,7 @@ class PluginSelector : public ArdourDialog
void vst_refiller (const std::string&);
void au_refiller (const std::string&);
+ Gtk::Menu* _plugin_menu;
ARDOUR::PluginManager *manager;
void row_clicked(GdkEventButton *);
@@ -136,6 +138,7 @@ class PluginSelector : public ArdourDialog
Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&);
Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&);
Gtk::Menu* create_by_category_menu (ARDOUR::PluginInfoList&);
+ void build_plugin_menu ();
};
#endif // __ardour_plugin_selector_h__