summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_region_view.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-07-11 13:17:01 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-07-11 13:17:01 +0000
commit07b584f3126094b44ada7b13f84bf40598888ad3 (patch)
tree00b413f788718f1a553c9db4f04967a3ac6037c3 /gtk2_ardour/midi_region_view.cc
parent58a700e96878ee5ea61388320c594addb4641bf2 (diff)
fix for #3977 - shift-tab and shift-ctrl-tab move to the next/previous note like tab, but leave existing selected note(s) selected
git-svn-id: svn://localhost/ardour2/branches/3.0@9838 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r--gtk2_ardour/midi_region_view.cc48
1 files changed, 28 insertions, 20 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index b873ea884d..eb0f87e117 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -723,13 +723,26 @@ MidiRegionView::key_press (GdkEventKey* ev)
} else if (ev->keyval == GDK_Tab) {
- if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
- goto_previous_note ();
+ if (Keyboard::modifier_state_contains (ev->state, Keyboard::PrimaryModifier)) {
+ goto_previous_note (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier));
} else {
- goto_next_note ();
+ goto_next_note (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier));
}
return true;
+ } else if (ev->keyval == GDK_ISO_Left_Tab) {
+
+ /* Shift-TAB generates ISO Left Tab, for some reason */
+
+ if (Keyboard::modifier_state_contains (ev->state, Keyboard::PrimaryModifier)) {
+ goto_previous_note (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier));
+ } else {
+ goto_next_note (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier));
+ }
+ return true;
+
+
+
} else if (ev->keyval == GDK_Up) {
bool allow_smush = Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier);
@@ -2054,15 +2067,6 @@ MidiRegionView::note_selected(ArdourCanvas::CanvasNoteEvent* ev, bool add, bool
add_to_selection (*i);
}
-#if 0
- /* if events were guaranteed to be time sorted, we could do this.
- but as of sept 10th 2009, they no longer are.
- */
-
- if ((*i)->note()->time() > latest) {
- break;
- }
-#endif
}
}
}
@@ -3141,9 +3145,8 @@ MidiRegionView::time_sort_events ()
}
void
-MidiRegionView::goto_next_note ()
+MidiRegionView::goto_next_note (bool add_to_selection)
{
- // framepos_t pos = -1;
bool use_next = false;
if (_events.back()->selected()) {
@@ -3157,8 +3160,11 @@ MidiRegionView::goto_next_note ()
use_next = true;
continue;
} else if (use_next) {
- unique_select (*i);
- // pos = _region->position() + beats_to_frames ((*i)->note()->time());
+ if (!add_to_selection) {
+ unique_select (*i);
+ } else {
+ note_selected (*i, true, false);
+ }
return;
}
}
@@ -3170,9 +3176,8 @@ MidiRegionView::goto_next_note ()
}
void
-MidiRegionView::goto_previous_note ()
+MidiRegionView::goto_previous_note (bool add_to_selection)
{
- // framepos_t pos = -1;
bool use_next = false;
if (_events.front()->selected()) {
@@ -3186,8 +3191,11 @@ MidiRegionView::goto_previous_note ()
use_next = true;
continue;
} else if (use_next) {
- unique_select (*i);
- // pos = _region->position() + beats_to_frames ((*i)->note()->time());
+ if (!add_to_selection) {
+ unique_select (*i);
+ } else {
+ note_selected (*i, true, false);
+ }
return;
}
}