summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-03-07 16:40:16 +0100
committerRobin Gareus <robin@gareus.org>2019-03-07 23:50:32 +0100
commit3bc9281c312ec237b6365c023c5ef060f5788a6b (patch)
tree12969680c5f11c2216bc3746f701c6906f8a2b21 /gtk2_ardour
parent204d7bf76ccccadea68a7bd3c8797b451a5c2971 (diff)
Fix some Gtk::Menu related memory leaks
A Gtk::manage()d widget will be deleted when its parent container is destroyed. Top-level context menus are not inside a container and hence need to be manually deallocated. This adds explicit delete calls for menus where there is a member variable reference to the Menu.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/audio_clock.cc1
-rw-r--r--gtk2_ardour/editor.cc6
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_routes.cc5
-rw-r--r--gtk2_ardour/editor_routes.h1
-rw-r--r--gtk2_ardour/generic_pluginui.cc1
-rw-r--r--gtk2_ardour/midi_time_axis.cc5
-rw-r--r--gtk2_ardour/panner_ui.cc2
-rw-r--r--gtk2_ardour/processor_box.cc9
-rw-r--r--gtk2_ardour/route_time_axis.cc5
-rw-r--r--gtk2_ardour/route_time_axis.h10
-rw-r--r--gtk2_ardour/shuttle_control.cc1
-rw-r--r--gtk2_ardour/transport_masters_dialog.cc7
-rw-r--r--gtk2_ardour/transport_masters_dialog.h1
-rw-r--r--gtk2_ardour/vca_time_axis.cc1
15 files changed, 37 insertions, 20 deletions
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 2656c2b445..329b2fb321 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -127,6 +127,7 @@ AudioClock::AudioClock (const string& clock_name, bool transient, const string&
AudioClock::~AudioClock ()
{
+ delete ops_menu;
delete foreground_attr;
delete editing_attr;
}
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 82ea4f027d..132a07a588 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -830,7 +830,6 @@ Editor::Editor ()
_ignore_region_action = false;
_last_region_menu_was_main = false;
- _popup_region_menu_item = 0;
_show_marker_lines = false;
@@ -858,6 +857,11 @@ Editor::Editor ()
Editor::~Editor()
{
+ delete tempo_marker_menu;
+ delete meter_marker_menu;
+ delete editor_ruler_menu;
+ delete _popup_region_menu_item;
+
delete button_bindings;
delete _routes;
delete _route_groups;
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 2931344195..ad0427fd62 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -953,7 +953,7 @@ private:
static double timebar_height;
guint32 visible_timebars;
- Gtk::Menu *editor_ruler_menu;
+ Gtk::Menu* editor_ruler_menu;
ArdourCanvas::Rectangle* tempo_bar;
ArdourCanvas::Rectangle* meter_bar;
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc
index f6a5cffb0b..f049bea2b9 100644
--- a/gtk2_ardour/editor_routes.cc
+++ b/gtk2_ardour/editor_routes.cc
@@ -323,6 +323,11 @@ EditorRoutes::EditorRoutes (Editor* e)
Route::PluginSetup.connect_same_thread (*this, boost::bind (&EditorRoutes::plugin_setup, this, _1, _2, _3));
}
+EditorRoutes::~EditorRoutes ()
+{
+ delete _menu;
+}
+
bool
EditorRoutes::focus_in (GdkEventFocus*)
{
diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h
index e9497edbbe..d588d54412 100644
--- a/gtk2_ardour/editor_routes.h
+++ b/gtk2_ardour/editor_routes.h
@@ -36,6 +36,7 @@ class EditorRoutes : public EditorComponent, public PBD::ScopedConnectionList, p
{
public:
EditorRoutes (Editor *);
+ ~EditorRoutes ();
void set_session (ARDOUR::Session *);
diff --git a/gtk2_ardour/generic_pluginui.cc b/gtk2_ardour/generic_pluginui.cc
index 34d38d3088..923c8891e0 100644
--- a/gtk2_ardour/generic_pluginui.cc
+++ b/gtk2_ardour/generic_pluginui.cc
@@ -224,6 +224,7 @@ GenericPluginUI::~GenericPluginUI ()
if (output_controls.size() > 0) {
screen_update_connection.disconnect();
}
+ delete automation_menu;
delete _pianomm;
}
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index f64caaf271..4cad0fb8be 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -550,10 +550,7 @@ MidiTimeAxisView::append_extra_display_menu_items ()
items.push_back (MenuElem (_("Patch Selector..."),
sigc::mem_fun(*this, &RouteUI::select_midi_patch)));
- color_mode_menu = build_color_mode_menu();
- if (color_mode_menu) {
- items.push_back (MenuElem (_("Color Mode"), *color_mode_menu));
- }
+ items.push_back (MenuElem (_("Color Mode"), *build_color_mode_menu ()));
items.push_back (SeparatorElem ());
}
diff --git a/gtk2_ardour/panner_ui.cc b/gtk2_ardour/panner_ui.cc
index d41a6a9719..485635f2b4 100644
--- a/gtk2_ardour/panner_ui.cc
+++ b/gtk2_ardour/panner_ui.cc
@@ -374,7 +374,7 @@ PannerUI::pan_button_event (GdkEventButton* ev)
case 3:
if (pan_menu == 0) {
- pan_menu = manage (new Menu);
+ pan_menu = new Menu;
pan_menu->set_name ("ArdourContextMenu");
}
build_pan_menu ();
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index f7c54a8bce..a31bfc9f73 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -715,7 +715,7 @@ ProcessorEntry::hide_things ()
}
-Menu *
+Menu*
ProcessorEntry::build_controls_menu ()
{
using namespace Menu_Helpers;
@@ -778,7 +778,7 @@ ProcessorEntry::toggle_control_visibility (Control* c)
_parent->update_gui_object_state (this);
}
-Menu *
+Menu*
ProcessorEntry::build_send_options_menu ()
{
using namespace Menu_Helpers;
@@ -2160,6 +2160,7 @@ ProcessorBox::show_processor_menu (int arg)
aux_menu_item->set_submenu (*m);
aux_menu_item->set_sensitive (true);
} else {
+ delete m;
/* stupid gtkmm: we need to pass a null reference here */
gtk_menu_item_set_submenu (aux_menu_item->gobj(), 0);
aux_menu_item->set_sensitive (false);
@@ -2174,6 +2175,7 @@ ProcessorBox::show_processor_menu (int arg)
listen_menu_item->set_submenu (*m);
listen_menu_item->set_sensitive (true);
} else {
+ delete m;
/* stupid gtkmm: we need to pass a null reference here */
gtk_menu_item_set_submenu (listen_menu_item->gobj(), 0);
listen_menu_item->set_sensitive (false);
@@ -2188,6 +2190,7 @@ ProcessorBox::show_processor_menu (int arg)
remove_listen_menu_item->set_submenu (*m);
remove_listen_menu_item->set_sensitive (true);
} else {
+ delete m;
/* stupid gtkmm: we need to pass a null reference here */
gtk_menu_item_set_submenu (remove_listen_menu_item->gobj(), 0);
remove_listen_menu_item->set_sensitive (false);
@@ -2213,6 +2216,7 @@ ProcessorBox::show_processor_menu (int arg)
controls_menu_item->set_submenu (*m);
controls_menu_item->set_sensitive (true);
} else {
+ delete m;
gtk_menu_item_set_submenu (controls_menu_item->gobj(), 0);
controls_menu_item->set_sensitive (false);
}
@@ -2230,6 +2234,7 @@ ProcessorBox::show_processor_menu (int arg)
send_menu_item->set_submenu (*m);
send_menu_item->set_sensitive (true);
} else {
+ delete m;
gtk_menu_item_set_submenu (send_menu_item->gobj(), 0);
send_menu_item->set_sensitive (false);
}
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 7614093e02..4092263dda 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -109,8 +109,6 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, ArdourCan
, plugins_submenu_item (0)
, route_group_menu (0)
, playlist_action_menu (0)
- , mode_menu (0)
- , color_mode_menu (0)
, gm (sess, true, 75, 14)
, _ignore_set_layer_display (false)
, pan_automation_item(NULL)
@@ -339,7 +337,7 @@ RouteTimeAxisView::~RouteTimeAxisView ()
}
delete playlist_action_menu;
- playlist_action_menu = 0;
+ delete automation_action_menu;
delete _view;
_view = 0;
@@ -788,6 +786,7 @@ RouteTimeAxisView::build_display_menu ()
} else {
/* show nothing */
+ delete alignment_menu;
}
items.push_back (SeparatorElem());
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index 48af0f82b2..1b061d0fc7 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -161,9 +161,9 @@ protected:
struct ProcessorAutomationInfo {
boost::shared_ptr<ARDOUR::Processor> processor;
- bool valid;
- Gtk::Menu* menu;
- std::vector<ProcessorAutomationNode*> lines;
+ bool valid;
+ Gtk::Menu* menu;
+ std::vector<ProcessorAutomationNode*> lines;
ProcessorAutomationInfo (boost::shared_ptr<ARDOUR::Processor> i)
: processor (i), valid (true), menu (0) {}
@@ -255,10 +255,6 @@ protected:
RouteGroupMenu* route_group_menu;
Gtk::Menu* playlist_action_menu;
Gtk::MenuItem* playlist_item;
- Gtk::Menu* mode_menu;
- Gtk::Menu* color_mode_menu;
-
- virtual Gtk::Menu* build_color_mode_menu() { return 0; }
void use_playlist (Gtk::RadioMenuItem *item, boost::weak_ptr<ARDOUR::Playlist> wpl);
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc
index d56214f9c0..190f2efb6e 100644
--- a/gtk2_ardour/shuttle_control.cc
+++ b/gtk2_ardour/shuttle_control.cc
@@ -106,6 +106,7 @@ ShuttleControl::~ShuttleControl ()
{
cairo_pattern_destroy (pattern);
cairo_pattern_destroy (shine_pattern);
+ delete shuttle_context_menu;
}
void
diff --git a/gtk2_ardour/transport_masters_dialog.cc b/gtk2_ardour/transport_masters_dialog.cc
index 7421671a01..8a5f9cf4ee 100644
--- a/gtk2_ardour/transport_masters_dialog.cc
+++ b/gtk2_ardour/transport_masters_dialog.cc
@@ -256,6 +256,11 @@ TransportMastersWidget::Row::Row (TransportMastersWidget& p)
{
}
+TransportMastersWidget::Row::~Row ()
+{
+ delete request_option_menu;
+}
+
bool
TransportMastersWidget::Row::name_press (GdkEventButton* ev)
{
@@ -367,7 +372,7 @@ TransportMastersWidget::Row::build_request_options ()
{
using namespace Gtk::Menu_Helpers;
- request_option_menu = manage (new Menu);
+ request_option_menu = new Menu;
MenuList& items (request_option_menu->items());
diff --git a/gtk2_ardour/transport_masters_dialog.h b/gtk2_ardour/transport_masters_dialog.h
index d2c2ab11bc..612f531bde 100644
--- a/gtk2_ardour/transport_masters_dialog.h
+++ b/gtk2_ardour/transport_masters_dialog.h
@@ -101,6 +101,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
void update (ARDOUR::Session*, ARDOUR::samplepos_t);
Row (TransportMastersWidget& parent);
+ ~Row ();
struct PortColumns : public Gtk::TreeModel::ColumnRecord {
PortColumns() {
diff --git a/gtk2_ardour/vca_time_axis.cc b/gtk2_ardour/vca_time_axis.cc
index d4394a65a2..32eacdfc76 100644
--- a/gtk2_ardour/vca_time_axis.cc
+++ b/gtk2_ardour/vca_time_axis.cc
@@ -122,6 +122,7 @@ VCATimeAxisView::VCATimeAxisView (PublicEditor& ed, Session* s, ArdourCanvas::Ca
VCATimeAxisView::~VCATimeAxisView ()
{
+ delete automation_action_menu;
}
void