diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-07-11 13:17:01 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-07-11 13:17:01 +0000 |
commit | 07b584f3126094b44ada7b13f84bf40598888ad3 (patch) | |
tree | 00b413f788718f1a553c9db4f04967a3ac6037c3 /gtk2_ardour/midi_region_view.cc | |
parent | 58a700e96878ee5ea61388320c594addb4641bf2 (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.cc | 48 |
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; } } |