summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-09-12 16:46:19 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-09-12 16:46:19 +0000
commit93bc6e5b58e321cd76b069d744a6f68acf530a9f (patch)
tree39150d1c1f067a1a13a18464694a7a9c3eddfa89 /gtk2_ardour
parentd98302ae2c9040dd61573739b3bbdc708d1dd54e (diff)
fix note selection behaviour, hopefully ... perhaps
git-svn-id: svn://localhost/ardour2/branches/3.0@5657 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_drag.cc10
-rw-r--r--gtk2_ardour/midi_region_view.cc21
2 files changed, 23 insertions, 8 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<ArdourCanvas::CanvasNote*>(_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(); ) {
+ if ((*i) != ev) {
- Selection::iterator tmp = i;
- ++tmp;
+ Selection::iterator tmp = i;
+ ++tmp;
- if ((*i) != ev) {
- remove_from_selection (*i);
- }
+ (*i)->selected (false);
+ _selection.erase (i);
+
+ i = tmp;
- 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);
}