From c482638aa6e0dbc0d4acdc93fe9712e1802fde32 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 10 Jan 2011 23:33:26 +0000 Subject: Revert to fader-is-for-route on double-clicking a mixer strip's fader. Fixes #3685. git-svn-id: svn://localhost/ardour2/branches/3.0@8496 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/gain_meter.cc | 28 +++++++++++++++++++--------- gtk2_ardour/gain_meter.h | 7 +++++-- gtk2_ardour/mixer_strip.cc | 3 +++ 3 files changed, 27 insertions(+), 11 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index 7dd7f88d7c..64fde6f6bf 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -110,8 +110,8 @@ GainMeterBase::GainMeterBase (Session* s, level_meter = new LevelMeter(_session); - gain_slider->signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeter::start_gain_touch)); - gain_slider->signal_button_release_event().connect (sigc::mem_fun(*this, &GainMeter::end_gain_touch)); + gain_slider->signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeter::gain_slider_button_press)); + gain_slider->signal_button_release_event().connect (sigc::mem_fun(*this, &GainMeter::gain_slider_button_release)); gain_slider->set_name ("GainFader"); gain_display.set_name ("MixerStripGainDisplay"); @@ -591,18 +591,28 @@ GainMeterBase::meter_point_clicked () } } -gint -GainMeterBase::start_gain_touch (GdkEventButton*) +bool +GainMeterBase::gain_slider_button_press (GdkEventButton* ev) { - _amp->gain_control()->start_touch (_amp->session().transport_frame()); - return FALSE; + switch (ev->type) { + case GDK_BUTTON_PRESS: + _amp->gain_control()->start_touch (_amp->session().transport_frame()); + break; + case GDK_2BUTTON_PRESS: + SliderDoubleClicked (); /* EMIT SIGNAL */ + break; + default: + return false; + } + + return true; } -gint -GainMeterBase::end_gain_touch (GdkEventButton*) +bool +GainMeterBase::gain_slider_button_release (GdkEventButton* ev) { _amp->gain_control()->stop_touch (false, _amp->session().transport_frame()); - return FALSE; + return true; } gint diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h index 600f7c2c00..8e96c51d9c 100644 --- a/gtk2_ardour/gain_meter.h +++ b/gtk2_ardour/gain_meter.h @@ -155,8 +155,8 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr Gtk::Menu* meter_menu; void popup_meter_menu (GdkEventButton*); - gint start_gain_touch (GdkEventButton*); - gint end_gain_touch (GdkEventButton*); + bool gain_slider_button_press (GdkEventButton *); + bool gain_slider_button_release (GdkEventButton *); void set_route_group_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); void set_meter_point (ARDOUR::Route&, ARDOUR::MeterPoint); @@ -170,6 +170,9 @@ class GainMeterBase : virtual public sigc::trackable, ARDOUR::SessionHandlePtr void reset_peak_display (); void reset_group_peak_display (ARDOUR::RouteGroup*); + /** Emitted when our slider is double-clicked */ + PBD::Signal0 SliderDoubleClicked; + static sigc::signal ResetAllPeakDisplays; static sigc::signal ResetGroupPeakDisplays; diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 8c6d612012..31098f304f 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -306,6 +306,9 @@ MixerStrip::init () input_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::input_press), false); output_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MixerStrip::output_press), false); + /* Go back to displaying our route's gain in the slider if it is double-clicked */ + gain_meter().SliderDoubleClicked.connect (*this, invalidator (*this), boost::bind (&MixerStrip::revert_to_default_display, this), gui_context ()); + /* we don't need this if its not an audio track, but we don't know that yet and it doesn't hurt (much). */ -- cgit v1.2.3