summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2014-08-28 10:31:57 -0500
committerBen Loftis <ben@harrisonconsoles.com>2014-08-28 10:31:57 -0500
commit3f297f7dab524dd17ef173efe41acd0ab028b0d5 (patch)
tree3c019c527403bf6dfd2fed9e1b8fe5efcee966c2 /gtk2_ardour
parent3cc19c2cce9ae7016232d28e0df3c9755ad1ca48 (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')
-rw-r--r--gtk2_ardour/ardour_button.cc4
-rw-r--r--gtk2_ardour/ardour_display.cc4
-rw-r--r--gtk2_ardour/ardour_display.h2
-rw-r--r--gtk2_ardour/ardour_dropdown.cc4
-rw-r--r--gtk2_ardour/ardour_dropdown.h2
-rw-r--r--gtk2_ardour/level_meter.cc4
-rw-r--r--gtk2_ardour/mixer_strip.cc4
-rw-r--r--gtk2_ardour/monitor_section.cc6
-rw-r--r--gtk2_ardour/route_ui.cc52
9 files changed, 42 insertions, 40 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) {