summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-03-07 21:24:15 +0100
committerRobin Gareus <robin@gareus.org>2019-03-07 23:50:46 +0100
commit12a415f0772048f8a38a66a037b024223bc7bbc0 (patch)
tree73178e3eaf658cae531ea09ea46d1776f2a4e08a /gtk2_ardour
parent64e1d691ecc54c33c34adb13a66f51790c9bc0d9 (diff)
Cleanup Editor/Marker context-menu
This could have caused crashes previously: ::build_range_marker_menu() may have created range_marker_menu while the GUI wanted transport_marker_menu.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.cc4
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_markers.cc25
3 files changed, 13 insertions, 18 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 132a07a588..a39e2056a1 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -370,7 +370,6 @@ Editor::Editor ()
, meter_marker_menu (0)
, marker_menu (0)
, range_marker_menu (0)
- , transport_marker_menu (0)
, new_transport_marker_menu (0)
, marker_menu_item (0)
, bbt_beat_subdivision (4)
@@ -859,6 +858,9 @@ Editor::~Editor()
{
delete tempo_marker_menu;
delete meter_marker_menu;
+ delete marker_menu;
+ delete range_marker_menu;
+ delete new_transport_marker_menu;
delete editor_ruler_menu;
delete _popup_region_menu_item;
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index ad0427fd62..6fd513d682 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1699,13 +1699,13 @@ private:
void build_tempo_marker_menu (TempoMarker *, bool);
void build_meter_marker_menu (MeterMarker *, bool);
void build_new_transport_marker_menu ();
+
void dynamic_cast_marker_object (void*, MeterMarker**, TempoMarker**) const;
Gtk::Menu* tempo_marker_menu;
Gtk::Menu* meter_marker_menu;
Gtk::Menu* marker_menu;
Gtk::Menu* range_marker_menu;
- Gtk::Menu* transport_marker_menu;
Gtk::Menu* new_transport_marker_menu;
ArdourCanvas::Item* marker_menu_item;
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index abe6d8a658..7506c8db98 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -815,7 +815,6 @@ Editor::tempo_or_meter_marker_context_menu (GdkEventButton* ev, ArdourCanvas::It
if (mm) {
can_remove = !mm->meter().initial ();
- delete meter_marker_menu;
build_meter_marker_menu (mm, can_remove);
meter_marker_menu->popup (1, ev->time);
} else if (tm) {
@@ -823,7 +822,6 @@ Editor::tempo_or_meter_marker_context_menu (GdkEventButton* ev, ArdourCanvas::It
return;
}
can_remove = !tm->tempo().initial() && !tm->tempo().locked_to_meter();
- delete tempo_marker_menu;
build_tempo_marker_menu (tm, can_remove);
tempo_marker_menu->popup (1, ev->time);
} else {
@@ -845,15 +843,13 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
if (loc == transport_loop_location() || loc == transport_punch_location() || loc->is_session_range ()) {
- delete transport_marker_menu;
- build_range_marker_menu (loc, loc == transport_loop_location() || loc == transport_punch_location(), loc->is_session_range());
+ build_range_marker_menu (loc, loc == transport_loop_location() || loc == transport_punch_location(), loc->is_session_range()); // XXX
marker_menu_item = item;
- transport_marker_menu->popup (1, ev->time);
+ range_marker_menu->popup (1, ev->time);
} else if (loc->is_mark()) {
- delete marker_menu;
build_marker_menu (loc);
// GTK2FIX use action group sensitivity
@@ -874,9 +870,7 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item)
marker_menu->popup (1, ev->time);
} else if (loc->is_range_marker()) {
- delete range_marker_menu;
build_range_marker_menu (loc, false, false);
-
marker_menu_item = item;
range_marker_menu->popup (1, ev->time);
}
@@ -898,6 +892,7 @@ Editor::build_marker_menu (Location* loc)
{
using namespace Menu_Helpers;
+ delete marker_menu;
marker_menu = new Menu;
MenuList& items = marker_menu->items();
@@ -940,15 +935,11 @@ Editor::build_range_marker_menu (Location* loc, bool loop_or_punch, bool session
bool const loop_or_punch_or_session = loop_or_punch || session;
- Menu* markerMenu = new Menu;
+ delete range_marker_menu;
+ Menu* range_marker_menu = new Menu;
- if (loop_or_punch_or_session) {
- transport_marker_menu = markerMenu;
- } else {
- range_marker_menu = markerMenu;
- }
- MenuList& items = markerMenu->items();
- markerMenu->set_name ("ArdourContextMenu");
+ MenuList& items = range_marker_menu->items();
+ range_marker_menu->set_name ("ArdourContextMenu");
items.push_back (MenuElem (_("Play Range"), sigc::mem_fun(*this, &Editor::marker_menu_play_range)));
items.push_back (MenuElem (_("Locate to Marker"), sigc::mem_fun(*this, &Editor::marker_menu_set_playhead)));
@@ -995,6 +986,7 @@ Editor::build_tempo_marker_menu (TempoMarker* loc, bool can_remove)
{
using namespace Menu_Helpers;
+ delete tempo_marker_menu;
tempo_marker_menu = new Menu;
MenuList& items = tempo_marker_menu->items();
@@ -1037,6 +1029,7 @@ Editor::build_meter_marker_menu (MeterMarker* loc, bool can_remove)
{
using namespace Menu_Helpers;
+ delete meter_marker_menu;
meter_marker_menu = new Menu;
MenuList& items = meter_marker_menu->items();