From 93bc6e5b58e321cd76b069d744a6f68acf530a9f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 12 Sep 2009 16:46:19 +0000 Subject: [PATCH] fix note selection behaviour, hopefully ... perhaps git-svn-id: svn://localhost/ardour2/branches/3.0@5657 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_drag.cc | 10 ++++++++-- gtk2_ardour/midi_region_view.cc | 23 ++++++++++++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 08f951a1e7..073ca5ef91 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3392,7 +3392,7 @@ NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *) ArdourCanvas::CanvasNote* cnote = dynamic_cast(_item); if (!(was_selected = cnote->selected())) { - + /* tertiary-click means extend selection - we'll do that on button release, so don't add it here, because otherwise we make it hard to figure out the "extend-to" range. @@ -3401,7 +3401,13 @@ NoteDrag::start_grab (GdkEvent* event, Gdk::Cursor *) bool extend = Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier); if (!extend) { - region->note_selected (cnote, true); + bool add = Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier); + + if (add) { + region->note_selected (cnote, true); + } else { + region->unique_select (cnote); + } } } } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 9fdd71922e..65bb61bb77 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1499,17 +1499,26 @@ void MidiRegionView::unique_select(ArdourCanvas::CanvasNoteEvent* ev) { for (Selection::iterator i = _selection.begin(); i != _selection.end(); ) { - - Selection::iterator tmp = i; - ++tmp; - if ((*i) != ev) { - remove_from_selection (*i); - } - i = tmp; + Selection::iterator tmp = i; + ++tmp; + + (*i)->selected (false); + _selection.erase (i); + + i = tmp; + + } else { + ++i; + } } + /* don't bother with removing this regionview from the editor selection, + since we're about to add another note, and thus put/keep this + regionview in the editor selection. + */ + if (!ev->selected()) { add_to_selection (ev); }