Fix note resize double undo bug.
authornick_m <mainsbridge@gmail.com>
Fri, 16 Jan 2015 17:55:05 +0000 (04:55 +1100)
committernick_m <mainsbridge@gmail.com>
Fri, 16 Jan 2015 17:55:05 +0000 (04:55 +1100)
Newly drawn notes are selected.
Clear midi note selection on Selection::set_state().

gtk2_ardour/editor_drag.cc
gtk2_ardour/midi_region_view.cc
gtk2_ardour/selection.cc

index ba7964f5e0cb56fc0029c872d5c9417da1276039..34e169b133c2de77e7e962609454c5fdbf80661c 100644 (file)
@@ -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
index 6d4555731fbc203b1429ed62529a729ba6f153af..b64c116b3f9f0816749fe07f3fc4faaf8d7b5e34 100644 (file)
@@ -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
index 53413e2dcf6055427e6a17e0fecb048a2b40e0bd..2cf79a3c4b0b74e7ffe6f3ea8765290b13401682 100644 (file)
@@ -1310,6 +1310,7 @@ Selection::set_state (XMLNode const & node, int)
        }
 
        clear_regions ();
+       clear_midi_notes ();
        clear_points ();
        clear_time ();
        clear_tracks ();