diff options
author | Robin Gareus <robin@gareus.org> | 2019-12-26 12:17:20 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-12-26 12:17:20 +0100 |
commit | b942eecc9c84f5d27e1e478c2c4ca69ab1fb8c0c (patch) | |
tree | fed39d8ca176d177cba3dbe6d9a7f3c311c0b636 /gtk2_ardour | |
parent | b228dce1c1a8f006df6b5c30ede5a02460f2e766 (diff) |
Vkeybd: force release notes on panic
If key(s) are still being pressed, a key-repeat will re-trigger
the most recently pressed note (depending on keyboard settings).
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/pianokeyboard.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/pianokeyboard.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/virtual_keyboard_window.cc | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/gtk2_ardour/pianokeyboard.cc b/gtk2_ardour/pianokeyboard.cc index d317a33bed..c4e0df0ebc 100644 --- a/gtk2_ardour/pianokeyboard.cc +++ b/gtk2_ardour/pianokeyboard.cc @@ -1045,6 +1045,13 @@ APianoKeyboard::sustain_release () } void +APianoKeyboard::reset () +{ + sustain_release (); + stop_unsustained_notes (); +} + +void APianoKeyboard::set_note_on (int note) { if (!_notes[note].pressed) { diff --git a/gtk2_ardour/pianokeyboard.h b/gtk2_ardour/pianokeyboard.h index 042afcd283..bf92e20936 100644 --- a/gtk2_ardour/pianokeyboard.h +++ b/gtk2_ardour/pianokeyboard.h @@ -52,6 +52,7 @@ public: void set_note_on (int note); void set_note_off (int note); + void reset (); void set_grand_piano_highlight (bool enabled); void set_annotate_layout (bool enabled); diff --git a/gtk2_ardour/virtual_keyboard_window.cc b/gtk2_ardour/virtual_keyboard_window.cc index ebe5a040e0..2af739e920 100644 --- a/gtk2_ardour/virtual_keyboard_window.cc +++ b/gtk2_ardour/virtual_keyboard_window.cc @@ -398,6 +398,7 @@ VirtualKeyboardWindow::update_octave_range () bool VirtualKeyboardWindow::send_panic_message (GdkEventButton*) { + _piano.reset (); uint8_t channel = PBD::atoi (_midi_channel.get_text ()) - 1; uint8_t ev[3]; ev[0] = MIDI_CMD_CONTROL | channel; |