further to 1a6a72b57, handle deleting a note while a non-selected one is entered.
authornick_m <mainsbridge@gmail.com>
Sat, 19 Nov 2016 10:40:41 +0000 (21:40 +1100)
committernick_m <mainsbridge@gmail.com>
Sat, 19 Nov 2016 10:40:41 +0000 (21:40 +1100)
gtk2_ardour/midi_region_view.cc
gtk2_ardour/midi_region_view.h

index 1e05e71e20826f1310665c0a62f16bb8640c7f38..e9c811ef2c85fed9e556a2b3e5382ce1672ccdba 100644 (file)
@@ -122,7 +122,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container*      parent,
        , _last_event_y (0)
        , _grabbed_keyboard (false)
        , _entered (false)
-       , _note_entered (false)
+       , _entered_note (0)
        , _mouse_changed_selection (false)
 {
        CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name()));
@@ -165,7 +165,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container*      parent,
        , _last_event_y (0)
        , _grabbed_keyboard (false)
        , _entered (false)
-       , _note_entered (false)
+       , _entered_note (0)
        , _mouse_changed_selection (false)
 {
        CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name()));
@@ -213,7 +213,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
        , _last_event_y (0)
        , _grabbed_keyboard (false)
        , _entered (false)
-       , _note_entered (false)
+       , _entered_note (0)
        , _mouse_changed_selection (false)
 {
        init (false);
@@ -245,7 +245,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
        , _last_event_y (0)
        , _grabbed_keyboard (false)
        , _entered (false)
-       , _note_entered (false)
+       , _entered_note (0)
        , _mouse_changed_selection (false)
 {
        init (true);
@@ -424,12 +424,12 @@ MidiRegionView::mouse_mode_changed ()
                        remove_ghost_note ();
 
                        /* XXX This is problematic as the function is executed for every region
-                       and only for one region _note_entered can be true. Still it's
+                       and only for one region _entered_note can be true. Still it's
                        necessary as to hide the verbose cursor when we're changing from
                        draw mode to internal edit mode. These lines are the reason why
                        in some situations no verbose cursor is shown when we enter internal
                        edit mode over a note. */
-                       if (!_note_entered) {
+                       if (!_entered_note) {
                                hide_verbose_cursor ();
                        }
                }
@@ -464,7 +464,7 @@ MidiRegionView::leave_internal()
 {
        hide_verbose_cursor ();
        remove_ghost_note ();
-       _note_entered = false;
+       _entered_note = 0;
 
        if (_grabbed_keyboard) {
                Keyboard::magic_widget_drop_focus();
@@ -597,7 +597,7 @@ MidiRegionView::motion (GdkEventMotion* ev)
 {
        PublicEditor& editor = trackview.editor ();
 
-       if (!_note_entered) {
+       if (!_entered_note) {
 
                if (_mouse_state == AddDragging) {
                        if (_ghost_note) {
@@ -1388,7 +1388,7 @@ MidiRegionView::~MidiRegionView ()
        if (_active_notes) {
                end_write();
        }
-
+       _entered_note = 0;
        _selection.clear();
        clear_events ();
 
@@ -2114,6 +2114,10 @@ MidiRegionView::step_patch (PatchChange& patch, bool bank, int delta)
 void
 MidiRegionView::note_deleted (NoteBase* cne)
 {
+       if (_entered_note && cne == _entered_note) {
+               _entered_note = 0;
+       }
+
        if (_selection.empty()) {
                return;
        }
@@ -2144,7 +2148,6 @@ MidiRegionView::delete_selection()
 
        apply_diff ();
 
-       _note_entered = false;
        hide_verbose_cursor ();
 }
 
@@ -3341,7 +3344,7 @@ MidiRegionView::change_channel(uint8_t channel)
 void
 MidiRegionView::note_entered(NoteBase* ev)
 {
-       _note_entered = true;
+       _entered_note = ev;
 
        Editor* editor = dynamic_cast<Editor*>(&trackview.editor());
 
@@ -3364,7 +3367,7 @@ MidiRegionView::note_entered(NoteBase* ev)
 void
 MidiRegionView::note_left (NoteBase*)
 {
-       _note_entered = false;
+       _entered_note = 0;
 
        for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
                (*i)->hide_velocity ();
index 7827e1eb4dcbc666cef5fba33a156c76355bcb8b..b5972cb9d2d28f4669d0492f8518285e4677261b 100644 (file)
@@ -501,11 +501,11 @@ private:
 
        framecnt_t _last_display_zoom;
 
-       double _last_event_x;
-       double _last_event_y;
-       bool   _grabbed_keyboard;
-       bool   _entered;
-       bool   _note_entered;
+       double    _last_event_x;
+       double    _last_event_y;
+       bool      _grabbed_keyboard;
+       bool      _entered;
+       NoteBase* _entered_note;
 
        bool _mouse_changed_selection;