diff options
Diffstat (limited to 'gtk2_ardour/shuttle_control.cc')
-rw-r--r-- | gtk2_ardour/shuttle_control.cc | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/gtk2_ardour/shuttle_control.cc b/gtk2_ardour/shuttle_control.cc index 88159fe020..3f18c26feb 100644 --- a/gtk2_ardour/shuttle_control.cc +++ b/gtk2_ardour/shuttle_control.cc @@ -241,10 +241,16 @@ ShuttleControl::on_button_press_event (GdkEventButton* ev) switch (ev->button) { case 1: - add_modal_grab (); - shuttle_grabbed = true; - shuttle_speed_on_grab = _session->transport_speed (); - mouse_shuttle (ev->x, true); + if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { + if (_session->transport_rolling()) { + _session->request_transport_speed (1.0); + } + } else { + add_modal_grab (); + shuttle_grabbed = true; + shuttle_speed_on_grab = _session->transport_speed (); + mouse_shuttle (ev->x, true); + } break; case 2: @@ -265,15 +271,16 @@ ShuttleControl::on_button_release_event (GdkEventButton* ev) switch (ev->button) { case 1: - shuttle_grabbed = false; - remove_modal_grab (); - - if (Config->get_shuttle_behaviour() == Sprung) { - _session->request_transport_speed (shuttle_speed_on_grab); - } else { - mouse_shuttle (ev->x, true); + if (shuttle_grabbed) { + shuttle_grabbed = false; + remove_modal_grab (); + + if (Config->get_shuttle_behaviour() == Sprung) { + _session->request_transport_speed (shuttle_speed_on_grab); + } else { + mouse_shuttle (ev->x, true); + } } - return true; case 2: |