diff options
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 28 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.h | 7 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 3 | ||||
-rw-r--r-- | libs/gtkmm2ext/pixfader.cc | 5 |
4 files changed, 29 insertions, 14 deletions
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<void> SliderDoubleClicked; + static sigc::signal<void> ResetAllPeakDisplays; static sigc::signal<void,ARDOUR::RouteGroup*> 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). */ diff --git a/libs/gtkmm2ext/pixfader.cc b/libs/gtkmm2ext/pixfader.cc index 10554e6bec..fa529c9a7e 100644 --- a/libs/gtkmm2ext/pixfader.cc +++ b/libs/gtkmm2ext/pixfader.cc @@ -123,20 +123,19 @@ bool PixFader::on_button_press_event (GdkEventButton* ev) { switch (ev->button) { - case 1: case 2: add_modal_grab(); grab_loc = (_orien == VERT) ? ev->y : ev->x; grab_start = (_orien == VERT) ? ev->y : ev->x; grab_window = ev->window; dragging = true; - break; + return true; default: break; } - return true; + return false; } bool |