diff options
author | Carl Hetherington <carl@carlh.net> | 2009-11-15 17:19:38 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-11-15 17:19:38 +0000 |
commit | 0aaa08a3d260539e2c193082d7c1ce2967a8e148 (patch) | |
tree | 31ce2e93dccb9248b809921c1c37fe9823f44973 /gtk2_ardour | |
parent | 14b993b1890d106a18dc2d1d489070cc806273f5 (diff) |
Fix some memory leaks in the plugin menu.
git-svn-id: svn://localhost/ardour2/branches/3.0@6091 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/plugin_selector.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/plugin_selector.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 2 |
3 files changed, 13 insertions, 16 deletions
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index c2f81f4981..f50c97e417 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -72,7 +72,6 @@ PluginSelector::PluginSelector (PluginManager *mgr) manager = mgr; session = 0; - _menu = 0; in_row_change = false; 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() { PluginInfoList all_plugs; @@ -581,27 +581,25 @@ PluginSelector::plugin_menu() using namespace Menu_Helpers; - if (!_menu) { - _menu = new Menu(); - _menu->set_name("ArdourContextMenu"); - } + Menu* menu = manage (new Menu()); + menu->set_name("ArdourContextMenu"); - MenuList& items = _menu->items(); + MenuList& items = menu->items(); items.clear (); 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 (SeparatorElem ()); 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); - items.push_back (MenuElem (_("By Category"), *by_category)); + items.push_back (MenuElem (_("By Category"), *manage (by_category))); - return *_menu; + return menu; } Gtk::Menu* @@ -655,7 +653,7 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs) submenu = x->second; } else { 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)); submenu->set_name("ArdourContextMenu"); } @@ -691,7 +689,7 @@ PluginSelector::create_by_category_menu (ARDOUR::PluginInfoList& all_plugs) submenu = x->second; } else { 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)); submenu->set_name("ArdourContextMenu"); } diff --git a/gtk2_ardour/plugin_selector.h b/gtk2_ardour/plugin_selector.h index 2e673d8de7..824fbf8207 100644 --- a/gtk2_ardour/plugin_selector.h +++ b/gtk2_ardour/plugin_selector.h @@ -45,7 +45,7 @@ class PluginSelector : public ArdourDialog void set_session (ARDOUR::Session*); void on_show (); - Gtk::Menu& plugin_menu (); + Gtk::Menu* plugin_menu (); void show_manager (); private: @@ -132,7 +132,6 @@ class PluginSelector : public ArdourDialog bool in_row_change; void plugin_chosen_from_menu (const ARDOUR::PluginInfoPtr&); - Gtk::Menu* _menu; Gtk::Menu* create_favs_menu (ARDOUR::PluginInfoList&); Gtk::Menu* create_by_creator_menu (ARDOUR::PluginInfoList&); diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 0890788931..5858ff76a0 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -309,7 +309,7 @@ ProcessorBox::show_processor_menu (gint arg) Gtk::MenuItem* plugin_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/processormenu/newplugin")); 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()); |