diff options
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/ardour_display.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/ardour_display.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_dropdown.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/ardour_dropdown.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/level_meter.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/monitor_section.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 52 | ||||
-rw-r--r-- | libs/gtkmm2ext/binding_proxy.cc | 23 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/binding_proxy.h | 8 |
11 files changed, 57 insertions, 56 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index f3295abcfa..6c7fa32438 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -692,11 +692,11 @@ ArdourButton::on_button_release_event (GdkEventButton *ev) if (_hovering) { - signal_clicked (); - + signal_clicked (); if (_act_on_release) { if (_action) { _action->activate (); + return true; } } } diff --git a/gtk2_ardour/ardour_display.cc b/gtk2_ardour/ardour_display.cc index ef845258ac..40fe30899a 100644 --- a/gtk2_ardour/ardour_display.cc +++ b/gtk2_ardour/ardour_display.cc @@ -52,8 +52,6 @@ using namespace std; ArdourDisplay::ArdourDisplay (Element e) { - signal_button_press_event().connect (sigc::mem_fun(*this, &ArdourDisplay::on_mouse_pressed)); - add_elements(e); add_elements(ArdourButton::Menu); add_elements(ArdourButton::Text); @@ -64,7 +62,7 @@ ArdourDisplay::~ArdourDisplay () } bool -ArdourDisplay::on_mouse_pressed (GdkEventButton*) +ArdourDisplay::on_button_press_event (GdkEventButton*) { _menu.popup (1, gtk_get_current_event_time()); return true; diff --git a/gtk2_ardour/ardour_display.h b/gtk2_ardour/ardour_display.h index 90bd61b834..3772d5423f 100644 --- a/gtk2_ardour/ardour_display.h +++ b/gtk2_ardour/ardour_display.h @@ -39,7 +39,7 @@ class ArdourDisplay : public ArdourButton boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); } void set_controllable (boost::shared_ptr<PBD::Controllable> c); - bool on_mouse_pressed (GdkEventButton*); //mousedown will pop up our preset menu + bool on_button_press_event (GdkEventButton*); //mousedown will pop up our preset menu // bool on_button_press_event (GdkEventButton*); // bool on_button_release_event (GdkEventButton*); bool on_scroll_event (GdkEventScroll* ev); diff --git a/gtk2_ardour/ardour_dropdown.cc b/gtk2_ardour/ardour_dropdown.cc index 3e214ef9e8..d98a9878a3 100644 --- a/gtk2_ardour/ardour_dropdown.cc +++ b/gtk2_ardour/ardour_dropdown.cc @@ -52,7 +52,7 @@ using namespace std; ArdourDropdown::ArdourDropdown (Element e) { - signal_button_press_event().connect (sigc::mem_fun(*this, &ArdourDropdown::on_mouse_pressed)); +// signal_button_press_event().connect (sigc::mem_fun(*this, &ArdourDropdown::on_mouse_pressed)); add_elements(e); add_elements(ArdourButton::Menu); @@ -63,7 +63,7 @@ ArdourDropdown::~ArdourDropdown () } bool -ArdourDropdown::on_mouse_pressed (GdkEventButton*) +ArdourDropdown::on_button_press_event (GdkEventButton*) { _menu.popup (1, gtk_get_current_event_time()); return true; diff --git a/gtk2_ardour/ardour_dropdown.h b/gtk2_ardour/ardour_dropdown.h index b9144c97f7..9d96e575f0 100644 --- a/gtk2_ardour/ardour_dropdown.h +++ b/gtk2_ardour/ardour_dropdown.h @@ -36,7 +36,7 @@ class ArdourDropdown : public ArdourButton ArdourDropdown (Element e = default_elements); virtual ~ArdourDropdown (); - bool on_mouse_pressed (GdkEventButton*); + bool on_button_press_event (GdkEventButton*); void AddMenuElem (Gtk::Menu_Helpers::MenuElem e); diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index 41cc29c370..4f36e922a9 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -409,8 +409,8 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width) meters[n].width = width; meters[n].length = len; meters[n].meter->add_events (Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); - meters[n].meter->signal_button_press_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_press)); - meters[n].meter->signal_button_release_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_release)); + meters[n].meter->signal_button_press_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_press), false); + meters[n].meter->signal_button_release_event().connect (sigc::mem_fun (*this, &LevelMeterBase::meter_button_release), false); } //pack_end (*meters[n].meter, false, false); diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index a7f8360ef7..17d59b8bf5 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -189,7 +189,7 @@ MixerStrip::init () solo_isolated_led->set_no_show_all (true); solo_isolated_led->set_name (X_("solo isolate")); solo_isolated_led->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - solo_isolated_led->signal_button_release_event().connect (sigc::mem_fun (*this, &RouteUI::solo_isolate_button_release)); + solo_isolated_led->signal_button_release_event().connect (sigc::mem_fun (*this, &RouteUI::solo_isolate_button_release), false); UI::instance()->set_tip (solo_isolated_led, _("Isolate Solo"), ""); solo_safe_led = manage (new ArdourButton (ArdourButton::led_default_elements)); @@ -198,7 +198,7 @@ MixerStrip::init () solo_safe_led->set_no_show_all (true); solo_safe_led->set_name (X_("solo safe")); solo_safe_led->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - solo_safe_led->signal_button_release_event().connect (sigc::mem_fun (*this, &RouteUI::solo_safe_button_release)); + solo_safe_led->signal_button_release_event().connect (sigc::mem_fun (*this, &RouteUI::solo_safe_button_release), false); UI::instance()->set_tip (solo_safe_led, _("Lock Solo Status"), ""); solo_safe_led->set_text (_("Lock")); diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc index 660587fd1c..b31eeea295 100644 --- a/gtk2_ardour/monitor_section.cc +++ b/gtk2_ardour/monitor_section.cc @@ -108,13 +108,13 @@ MonitorSection::MonitorSection (Session* s) ARDOUR_UI::Blink.connect (sigc::mem_fun (*this, &MonitorSection::do_blink)); - rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo)); + rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo), false); UI::instance()->set_tip (rude_solo_button, _("When active, something is soloed.\nClick to de-solo everything")); - rude_iso_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_isolate)); + rude_iso_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_isolate), false); UI::instance()->set_tip (rude_iso_button, _("When active, something is solo-isolated.\nClick to de-isolate everything")); - rude_audition_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_audition)); + rude_audition_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_audition), false); UI::instance()->set_tip (rude_audition_button, _("When active, auditioning is active.\nClick to stop the audition")); solo_in_place_button.set_name ("monitor section solo model"); 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) { diff --git a/libs/gtkmm2ext/binding_proxy.cc b/libs/gtkmm2ext/binding_proxy.cc index c56ab85982..bf21c19bce 100644 --- a/libs/gtkmm2ext/binding_proxy.cc +++ b/libs/gtkmm2ext/binding_proxy.cc @@ -31,20 +31,17 @@ using namespace Gtkmm2ext; using namespace std; using namespace PBD; +guint BindingProxy::bind_button = 2; +guint BindingProxy::bind_statemask = Gdk::CONTROL_MASK; + BindingProxy::BindingProxy (boost::shared_ptr<Controllable> c) : prompter (0), - controllable (c), - bind_button (2), - bind_statemask (Gdk::CONTROL_MASK) - + controllable (c) { } BindingProxy::BindingProxy () - : prompter (0), - bind_button (2), - bind_statemask (Gdk::CONTROL_MASK) - + : prompter (0) { } @@ -69,17 +66,17 @@ BindingProxy::set_bind_button_state (guint button, guint statemask) bind_statemask = statemask; } -void -BindingProxy::get_bind_button_state (guint &button, guint &statemask) +bool +BindingProxy::is_bind_action (GdkEventButton *ev) { - button = bind_button; - statemask = bind_statemask; + return ( (ev->state & bind_statemask) && ev->button == bind_button ); } + bool BindingProxy::button_press_handler (GdkEventButton *ev) { - if (controllable && (ev->state & bind_statemask) && ev->button == bind_button) { + if ( controllable && is_bind_action(ev) ) { if (Controllable::StartLearning (controllable.get())) { string prompt = _("operate controller now"); if (prompter == 0) { diff --git a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h index d6e3140462..022a0cbcd9 100644 --- a/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h +++ b/libs/gtkmm2ext/gtkmm2ext/binding_proxy.h @@ -41,8 +41,8 @@ class LIBGTKMM2EXT_API BindingProxy : public sigc::trackable virtual ~BindingProxy(); void set_bind_button_state (guint button, guint statemask); - void get_bind_button_state (guint &button, guint &statemask); + static bool is_bind_action (GdkEventButton *); bool button_press_handler (GdkEventButton *); boost::shared_ptr<PBD::Controllable> get_controllable() const { return controllable; } @@ -51,8 +51,10 @@ class LIBGTKMM2EXT_API BindingProxy : public sigc::trackable protected: Gtkmm2ext::PopUp* prompter; boost::shared_ptr<PBD::Controllable> controllable; - guint bind_button; - guint bind_statemask; + + static guint bind_button; + static guint bind_statemask; + PBD::ScopedConnection learning_connection; void learning_finished (); bool prompter_hiding (GdkEventAny *); |