Fix some memory leaks in the plugin menu.
authorCarl Hetherington <carl@carlh.net>
Sun, 15 Nov 2009 17:19:38 +0000 (17:19 +0000)
committerCarl Hetherington <carl@carlh.net>
Sun, 15 Nov 2009 17:19:38 +0000 (17:19 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@6091 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/plugin_selector.cc
gtk2_ardour/plugin_selector.h
gtk2_ardour/processor_box.cc

index c2f81f4981b10d3ad8b28da51faf5dcd88b5d757..f50c97e417468186a7c49260d4909c7bfb89e3af 100644 (file)
@@ -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");
                }
index 2e673d8de777152ef5a8fe394cfbab6e9c9d0575..824fbf8207c2fda5175b0822213948d62c01db78 100644 (file)
@@ -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&);
index 08907889310b17fe1a27c31c02ce12de775c65c5..5858ff76a0e2e05c7c4e2246523e45bf9eccb8a1 100644 (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"));
 
        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());