diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-16 02:56:36 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-11-16 02:56:36 +0000 |
commit | c89db7a9ee57ad9a5f854de2be4e1e17f3768658 (patch) | |
tree | 3b8dc6fc627412afa09f8adbecd828af7e8240fc /gtk2_ardour | |
parent | 2fc01707a705f9f668d05a9df0eabb6f2b601561 (diff) |
fix memory leak when creating plugin-by-creator & plugin-by-category menus
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6096 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/plugin_selector.cc | 29 | ||||
-rw-r--r-- | gtk2_ardour/plugin_selector.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/redirect_box.cc | 2 |
3 files changed, 15 insertions, 19 deletions
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index 684ef2f36a..d0c9a8fbb1 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -68,7 +68,6 @@ PluginSelector::PluginSelector (PluginManager *mgr) manager = mgr; session = 0; - _menu = 0; in_row_change = false; plugin_model = Gtk::ListStore::create (plugin_columns); @@ -552,7 +551,7 @@ struct PluginMenuCompareByCategory { } }; -Gtk::Menu& +Gtk::Menu* PluginSelector::plugin_menu() { PluginInfoList all_plugs; @@ -570,27 +569,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* @@ -598,7 +595,7 @@ PluginSelector::create_favs_menu (PluginInfoList& all_plugs) { using namespace Menu_Helpers; - Menu* favs = new Menu(); + Menu* favs = manage (new Menu()); favs->set_name("ArdourContextMenu"); PluginMenuCompareByName cmp_by_name; @@ -620,7 +617,7 @@ PluginSelector::create_by_creator_menu (ARDOUR::PluginInfoList& all_plugs) typedef std::map<Glib::ustring,Gtk::Menu*> SubmenuMap; SubmenuMap creator_submenu_map; - Menu* by_creator = new Menu(); + Menu* by_creator = manage (new Menu()); by_creator->set_name("ArdourContextMenu"); MenuList& by_creator_items = by_creator->items(); @@ -644,7 +641,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"); } @@ -661,7 +658,7 @@ PluginSelector::create_by_category_menu (ARDOUR::PluginInfoList& all_plugs) typedef std::map<Glib::ustring,Gtk::Menu*> SubmenuMap; SubmenuMap category_submenu_map; - Menu* by_category = new Menu(); + Menu* by_category = manage (new Menu()); by_category->set_name("ArdourContextMenu"); MenuList& by_category_items = by_category->items(); @@ -680,7 +677,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 dfdb3d05a2..b5367c6a99 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: @@ -128,7 +128,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/redirect_box.cc b/gtk2_ardour/redirect_box.cc index cb6adb9224..222cbb4d22 100644 --- a/gtk2_ardour/redirect_box.cc +++ b/gtk2_ardour/redirect_box.cc @@ -258,7 +258,7 @@ RedirectBox::show_redirect_menu (gint arg) Gtk::MenuItem* plugin_menu_item = dynamic_cast<Gtk::MenuItem*>(ActionManager::get_widget("/redirectmenu/newplugin")); if (plugin_menu_item) { - plugin_menu_item->set_submenu (_plugin_selector.plugin_menu()); + plugin_menu_item->set_submenu (*_plugin_selector.plugin_menu()); } cut_action->set_sensitive (can_cut_redirects ()); |