diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 712a8bc128..5868945615 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -684,8 +684,10 @@ private: void add_new_location (ARDOUR::Location*); ArdourCanvas::Container* add_new_location_internal (ARDOUR::Location*); void location_gone (ARDOUR::Location*); - void remove_marker (ArdourCanvas::Item&, GdkEvent*); - gint really_remove_marker (ARDOUR::Location* loc); + void remove_marker (ArdourCanvas::Item&); + void remove_marker (ArdourMarker*); + gint really_remove_global_marker (ARDOUR::Location* loc); + gint really_remove_region_marker (ArdourMarker*); void goto_nth_marker (int nth); void trigger_script (int nth); void trigger_script_by_name (const std::string script_name); diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index ef53630453..f6e9acd677 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -738,29 +738,45 @@ Editor::mouse_add_new_range (samplepos_t where) } void -Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*) +Editor::remove_marker (ArdourCanvas::Item& item) { ArdourMarker* marker; - bool is_start; + + if (!_session) { + return; + } if ((marker = static_cast (item.get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; abort(); /*NOTREACHED*/ } - if (entered_marker == marker) { - entered_marker = NULL; + remove_marker (marker); +} + +void +Editor::remove_marker (ArdourMarker* marker) +{ + if (!_session) { + return; } - Location* loc = find_location_from_marker (marker, is_start); + if (marker->type() == ArdourMarker::RegionCue) { + Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_region_marker), marker)); + } else { - if (_session && loc) { - Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_marker), loc)); + bool is_start; + + Location* loc = find_location_from_marker (marker, is_start); + + if (loc) { + Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_global_marker), loc)); + } } } gint -Editor::really_remove_marker (Location* loc) +Editor::really_remove_global_marker (Location* loc) { begin_reversible_command (_("remove marker")); XMLNode &before = _session->locations()->get_state(); @@ -771,6 +787,15 @@ Editor::really_remove_marker (Location* loc) return FALSE; } +gint +Editor::really_remove_region_marker (ArdourMarker* marker) +{ + begin_reversible_command (_("remove region marker")); + cerr << "would remove this region marker\n"; + commit_reversible_command (); + return FALSE; +} + void Editor::location_gone (Location *location) { @@ -1429,7 +1454,7 @@ Editor::marker_menu_remove () } else if (tm) { remove_tempo_marker (marker_menu_item); } else { - remove_marker (*marker_menu_item, (GdkEvent*) 0); + remove_marker (*marker_menu_item); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 27fb7f2f8f..13f7960443 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1669,7 +1669,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT break; case MarkerItem: - remove_marker (*item, event); + remove_marker (*item); break; case RegionItem: diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index dbda906f0f..d3d4f1c644 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4308,14 +4308,8 @@ Editor::cut_copy (CutCopyOp op) /* cut/delete op while pointing at a marker */ - bool ignored; - Location* loc = find_location_from_marker (entered_marker, ignored); - - if (_session && loc) { - entered_marker = NULL; - Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_marker), loc)); - } - + remove_marker (entered_marker); + entered_marker = NULL; _drags->abort (); return; }