Fix some memory leaks in the plugin menu.

git-svn-id: svn://localhost/ardour2/branches/3.0@6091 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2009-11-15 17:19:38 +00:00
parent 14b993b189
commit 0aaa08a3d2
3 changed files with 13 additions and 16 deletions

View file

@ -72,7 +72,6 @@ PluginSelector::PluginSelector (PluginManager *mgr)
manager = mgr; manager = mgr;
session = 0; session = 0;
_menu = 0;
in_row_change = false; in_row_change = false;
plugin_model = Gtk::ListStore::create (plugin_columns); plugin_model = Gtk::ListStore::create (plugin_columns);
@ -563,7 +562,8 @@ struct PluginMenuCompareByCategory {
} }
}; };
Gtk::Menu& /** @return a Gtk::manage()d menu */
Gtk::Menu*
PluginSelector::plugin_menu() PluginSelector::plugin_menu()
{ {
PluginInfoList all_plugs; PluginInfoList all_plugs;
@ -581,27 +581,25 @@ PluginSelector::plugin_menu()
using namespace Menu_Helpers; using namespace Menu_Helpers;
if (!_menu) { Menu* menu = manage (new Menu());
_menu = new Menu(); menu->set_name("ArdourContextMenu");
_menu->set_name("ArdourContextMenu");
}
MenuList& items = _menu->items(); MenuList& items = menu->items();
items.clear (); items.clear ();
Gtk::Menu* favs = create_favs_menu(all_plugs); Gtk::Menu* favs = create_favs_menu(all_plugs);
items.push_back (MenuElem (_("Favorites"), *favs)); items.push_back (MenuElem (_("Favorites"), *manage (favs)));
items.push_back (MenuElem (_("Plugin Manager"), mem_fun (*this, &PluginSelector::show_manager))); items.push_back (MenuElem (_("Plugin Manager"), mem_fun (*this, &PluginSelector::show_manager)));
items.push_back (SeparatorElem ()); items.push_back (SeparatorElem ());
Menu* by_creator = create_by_creator_menu(all_plugs); Menu* by_creator = create_by_creator_menu(all_plugs);
items.push_back (MenuElem (_("By Creator"), *by_creator)); items.push_back (MenuElem (_("By Creator"), *manage (by_creator)));
Menu* by_category = create_by_category_menu(all_plugs); Menu* by_category = create_by_category_menu(all_plugs);
items.push_back (MenuElem (_("By Category"), *by_category)); items.push_back (MenuElem (_("By Category"), *manage (by_category)));
return *_menu; return menu;
} }
Gtk::Menu* Gtk::Menu*
@ -655,7 +653,7 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs)
submenu = x->second; submenu = x->second;
} else { } else {
submenu = new Gtk::Menu; submenu = new Gtk::Menu;
by_creator_items.push_back (MenuElem (creator, *submenu)); by_creator_items.push_back (MenuElem (creator, *manage (submenu)));
creator_submenu_map.insert (pair<Glib::ustring,Menu*> (creator, submenu)); creator_submenu_map.insert (pair<Glib::ustring,Menu*> (creator, submenu));
submenu->set_name("ArdourContextMenu"); submenu->set_name("ArdourContextMenu");
} }
@ -691,7 +689,7 @@ PluginSelector::create_by_category_menu (ARDOUR::PluginInfoList& all_plugs)
submenu = x->second; submenu = x->second;
} else { } else {
submenu = new Gtk::Menu; submenu = new Gtk::Menu;
by_category_items.push_back (MenuElem (category, *submenu)); by_category_items.push_back (MenuElem (category, *manage (submenu)));
category_submenu_map.insert (pair<Glib::ustring,Menu*> (category, submenu)); category_submenu_map.insert (pair<Glib::ustring,Menu*> (category, submenu));
submenu->set_name("ArdourContextMenu"); submenu->set_name("ArdourContextMenu");
} }

View file

@ -45,7 +45,7 @@ class PluginSelector : public ArdourDialog
void set_session (ARDOUR::Session*); void set_session (ARDOUR::Session*);
void on_show (); void on_show ();
Gtk::Menu& plugin_menu (); Gtk::Menu* plugin_menu ();
void show_manager (); void show_manager ();
private: private:
@ -132,7 +132,6 @@ class PluginSelector : public ArdourDialog
bool in_row_change; bool in_row_change;
void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&); void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&);
Gtk::Menu* _menu;
Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&);
Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&);

View file

@ -309,7 +309,7 @@ ProcessorBox::show_processor_menu (gint arg)
Gtk::MenuItem* plugin_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newplugin")); Gtk::MenuItem* plugin_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newplugin"));
if (plugin_menu_item) { if (plugin_menu_item) {
plugin_menu_item->set_submenu (_get_plugin_selector()->plugin_menu()); plugin_menu_item->set_submenu (*_get_plugin_selector()->plugin_menu());
} }
paste_action->set_sensitive (!_rr_selection.processors.empty()); paste_action->set_sensitive (!_rr_selection.processors.empty());