diff options
author | nick_m <mainsbridge@gmail.com> | 2015-01-17 04:55:05 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2015-01-17 04:55:05 +1100 |
commit | ade1c4923ca58a56c5160826253091f67f03fd2f (patch) | |
tree | c9b7bdc706138984c829e77482628edeb717424e | |
parent | 4166b05bdacd2e77352c4eb4e960146f338df0c3 (diff) |
Fix note resize double undo bug.
Newly drawn notes are selected.
Clear midi note selection on Selection::set_state().
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/selection.cc | 1 |
3 files changed, 16 insertions, 8 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index ba7964f5e0..34e169b133 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1963,6 +1963,8 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/) */ region->note_selected (cnote, cnote->selected ()); + _editor->begin_reversible_command (_("resize notes")); + for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ) { MidiRegionSelection::iterator next; next = r; @@ -2001,6 +2003,8 @@ NoteResizeDrag::finished (GdkEvent*, bool /*movement_occurred*/) mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); } } + + _editor->commit_reversible_command (); } void diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 6d4555731f..b64c116b3f 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -951,11 +951,12 @@ MidiRegionView::create_note_at (framepos_t t, double y, Evoral::Beats length, bo view->update_note_range(new_note->note()); - trackview.editor().begin_reversible_command(_("add note")); - MidiModel::NoteDiffCommand* cmd = _model->new_note_diff_command(_("add note")); - cmd->add (new_note); - _model->apply_command(*trackview.session(), cmd); - trackview.editor().commit_reversible_command(); + start_note_diff_command(_("add note")); + + clear_selection (); + note_diff_add_note (new_note, true, false); + + apply_diff(); play_midi_note (new_note); } @@ -1852,10 +1853,12 @@ MidiRegionView::step_add_note (uint8_t channel, uint8_t number, uint8_t velocity view->update_note_range(new_note->note()); _marked_for_selection.clear (); - clear_selection (); start_note_diff_command (_("step add")); + + clear_selection (); note_diff_add_note (new_note, true, false); + apply_diff(); // last_step_edit_note = new_note; @@ -2779,7 +2782,7 @@ MidiRegionView::update_resizing (NoteBase* primary, bool at_front, double delta_ void MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_x, bool relative) { - start_note_diff_command (_("resize notes")); + _note_diff_command = _model->new_note_diff_command (_("resize notes")); for (std::vector<NoteResizeData *>::iterator i = _resize_data.begin(); i != _resize_data.end(); ++i) { Note* canvas_note = (*i)->note; @@ -2840,7 +2843,7 @@ MidiRegionView::commit_resizing (NoteBase* primary, bool at_front, double delta_ } _resize_data.clear(); - apply_diff(); + apply_diff(true); } void diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index 53413e2dcf..2cf79a3c4b 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -1310,6 +1310,7 @@ Selection::set_state (XMLNode const & node, int) } clear_regions (); + clear_midi_notes (); clear_points (); clear_time (); clear_tracks (); |