summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-11-16 02:56:36 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-11-16 02:56:36 +0000
commitc89db7a9ee57ad9a5f854de2be4e1e17f3768658 (patch)
tree3b8dc6fc627412afa09f8adbecd828af7e8240fc /gtk2_ardour
parent2fc01707a705f9f668d05a9df0eabb6f2b601561 (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.cc29
-rw-r--r--gtk2_ardour/plugin_selector.h3
-rw-r--r--gtk2_ardour/redirect_box.cc2
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 ());