Clear point selection when uniquely selecting a note.
authornick_m <mainsbridge@gmail.com>
Fri, 23 Oct 2015 13:07:03 +0000 (00:07 +1100)
committernick_m <mainsbridge@gmail.com>
Fri, 23 Oct 2015 13:07:03 +0000 (00:07 +1100)
- Also fix selection undo when creating notes w/control
  in MouseContent mode.

gtk2_ardour/editor_drag.cc
gtk2_ardour/midi_region_view.cc

index 53dca40476309b321d4c4b8e94802369c0fab523..4be15613b03a6a42ebb113bf108ef32a58333fe0 100644 (file)
@@ -2381,9 +2381,11 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/)
                /* has to be relative, may make no sense otherwise */
                relative = true;
        }
+
        /* select this note; if it is already selected, preserve the existing selection,
           otherwise make this note the only one selected.
        */
+       _editor->get_selection().clear_points();
        region->note_selected (cnote, cnote->selected ());
 }
 
@@ -5298,11 +5300,9 @@ NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
                        if (add) {
                                _region->note_selected (_primary, true);
                        } else {
+                               _editor->get_selection().clear_points();
                                _region->unique_select (_primary);
                        }
-
-                       _editor->begin_reversible_selection_op(X_("Select Note Press"));
-                       _editor->commit_reversible_selection_op();
                }
        }
 }
@@ -5419,13 +5419,16 @@ NoteDrag::finished (GdkEvent* ev, bool moved)
                                        _region->note_deselected (_primary);
                                        changed = true;
                                } else {
+                                       _editor->get_selection().clear_points();
                                        _region->unique_select (_primary);
+                                       changed = true;
                                }
                        } else {
                                bool extend = Keyboard::modifier_state_equals (ev->button.state, Keyboard::TertiaryModifier);
                                bool add = Keyboard::modifier_state_equals (ev->button.state, Keyboard::PrimaryModifier);
 
                                if (!extend && !add && _region->selection_size() > 1) {
+                                       _editor->get_selection().clear_points();
                                        _region->unique_select (_primary);
                                        changed = true;
                                } else if (extend) {
@@ -5433,6 +5436,8 @@ NoteDrag::finished (GdkEvent* ev, bool moved)
                                        changed = true;
                                } else {
                                        /* it was added during button press */
+                                       changed = true;
+
                                }
                        }
 
index ba8c72120e55315249ac2c6b5a26a7799429a4e4..d53f5adc72fe1a0a04b714be7111c4d8c07f8611 100644 (file)
@@ -543,7 +543,6 @@ MidiRegionView::button_release (GdkEventButton* ev)
                case MouseContent:
                case MouseTimeFX:
                        {
-                               clear_selection();
                                _mouse_changed_selection = true;
 
                                if (Keyboard::is_insert_note_event(ev)) {
@@ -562,6 +561,8 @@ MidiRegionView::button_release (GdkEventButton* ev)
                                        beats -= Evoral::Beats::tick();
 
                                        create_note_at (editor.pixel_to_sample (event_x), event_y, beats, true);
+                               } else {
+                                       clear_selection ();
                                }
 
                                break;