diff options
author | Ben Loftis <ben@harrisonconsoles.com> | 2014-08-28 10:31:57 -0500 |
---|---|---|
committer | Ben Loftis <ben@harrisonconsoles.com> | 2014-08-28 10:31:57 -0500 |
commit | 3f297f7dab524dd17ef173efe41acd0ab028b0d5 (patch) | |
tree | 3c019c527403bf6dfd2fed9e1b8fe5efcee966c2 /gtk2_ardour/route_ui.cc | |
parent | 3cc19c2cce9ae7016232d28e0df3c9755ad1ca48 (diff) |
Fix ArdourButton event sequence.
Always give ArdourButton a chance to handle Press or Release events if you override them.
This allows ArdourButtons to do the "Pressed" animation
And it now correctly eats the event so button clicks don't select the channelstrip.
Diffstat (limited to 'gtk2_ardour/route_ui.cc')
-rw-r--r-- | gtk2_ardour/route_ui.cc | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index ffe7ae13d4..e86cfc9d4e 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -176,7 +176,7 @@ RouteUI::init () rec_enable_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::rec_enable_release), false); show_sends_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::show_sends_press), false); - show_sends_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::show_sends_release)); + show_sends_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::show_sends_release), false); solo_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::solo_press), false); solo_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::solo_release), false); @@ -186,11 +186,11 @@ RouteUI::init () monitor_input_button->set_distinct_led_click (false); monitor_disk_button->set_distinct_led_click (false); - monitor_input_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_press)); - monitor_input_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_release)); + monitor_input_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_press), false); + monitor_input_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_input_release), false); - monitor_disk_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_press)); - monitor_disk_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_release)); + monitor_disk_button->signal_button_press_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_press), false); + monitor_disk_button->signal_button_release_event().connect (sigc::mem_fun(*this, &RouteUI::monitor_disk_release), false); BusSendDisplayChanged.connect_same_thread (*this, boost::bind(&RouteUI::bus_send_display_changed, this, _1)); } @@ -323,6 +323,10 @@ RouteUI::mute_press (GdkEventButton* ev) return true; } + //if this is a binding action, let the ArdourButton handle it + if ( BindingProxy::is_bind_action(ev) ) + return false; + multiple_mute_change = false; if (Keyboard::is_context_menu_event (ev)) { @@ -338,14 +342,8 @@ RouteUI::mute_press (GdkEventButton* ev) } else { if (Keyboard::is_button2_event (ev)) { - // Primary-button2 click is the midi binding click // button2-click is "momentary" - //give the button a chance to handle a midi binding - if (mute_button->on_button_press_event (ev)) { - return true; - } - _mute_release = new SoloMuteRelease (_route->muted ()); } @@ -494,6 +492,10 @@ RouteUI::solo_press(GdkEventButton* ev) return true; } + //if this is a binding action, let the ArdourButton handle it + if ( BindingProxy::is_bind_action(ev) ) + return false; + multiple_solo_change = false; if (Keyboard::is_context_menu_event (ev)) { @@ -512,11 +514,6 @@ RouteUI::solo_press(GdkEventButton* ev) if (Keyboard::is_button2_event (ev)) { - // Give the button a chance to handle MIDI binding - if (solo_button->on_button_press_event (ev)) { - return true; - } - // button2-click is "momentary" _solo_release = new SoloMuteRelease (_route->self_soloed()); } @@ -659,6 +656,10 @@ RouteUI::rec_enable_press(GdkEventButton* ev) return true; } + //if this is a binding action, let the ArdourButton handle it + if ( BindingProxy::is_bind_action(ev) ) + return false; + if (!_session->engine().connected()) { MessageDialog msg (_("Not connected to AudioEngine - cannot engage record")); msg.run (); @@ -771,25 +772,29 @@ RouteUI::update_monitoring_display () bool RouteUI::monitor_input_press(GdkEventButton*) { - return true; +printf("RouteUI monitor_input_press\n"); + return false; } bool RouteUI::monitor_input_release(GdkEventButton* ev) { +printf("RouteUI monitor_input_release\n"); return monitor_release (ev, MonitorInput); } bool RouteUI::monitor_disk_press (GdkEventButton*) { - return true; +printf("RouteUI monitor_disk_press\n"); + return false; } bool RouteUI::monitor_disk_release (GdkEventButton* ev) { - return monitor_release (ev, MonitorDisk); + printf("RouteUI monitor_disk_release\n"); + monitor_release (ev, MonitorDisk); } bool @@ -839,7 +844,7 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice) DisplaySuspender ds; _session->set_monitoring (rl, mc, Session::rt_cleanup, true); - return true; + return false; } void @@ -1428,7 +1433,7 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev) } } - return true; + return false; } bool @@ -1436,7 +1441,6 @@ RouteUI::solo_safe_button_release (GdkEventButton* ev) { if (ev->button == 1) { _route->set_solo_safe (!solo_safe_led->active_state(), this); - return true; } return false; } @@ -2009,8 +2013,8 @@ RouteUI::setup_invert_buttons () for (uint32_t i = 0; i < to_add; ++i) { ArdourButton* b = manage (new ArdourButton); - b->signal_button_press_event().connect (sigc::mem_fun (*this, &RouteUI::invert_press)); - b->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_release), i)); + b->signal_button_press_event().connect (sigc::mem_fun (*this, &RouteUI::invert_press), false); + b->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_release), i), false); b->set_name (X_("invert button")); if (to_add == 1) { |