Revert to fader-is-for-route on double-clicking a mixer strip's fader. Fixes #3685.
authorCarl Hetherington <carl@carlh.net>
Mon, 10 Jan 2011 23:33:26 +0000 (23:33 +0000)
committerCarl Hetherington <carl@carlh.net>
Mon, 10 Jan 2011 23:33:26 +0000 (23:33 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8496 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/gain_meter.cc
gtk2_ardour/gain_meter.h
gtk2_ardour/mixer_strip.cc
libs/gtkmm2ext/pixfader.cc

index 7dd7f88d7c778172950e1a333ee89e41a0def6b3..64fde6f6bf24f8cf6fb8455b03f9aa693d3d6ae6 100644 (file)
@@ -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
index 600f7c2c00539a1d17f7c486504bacde5b59fed1..8e96c51d9cc88076af0dd8f85061de314e4158bd 100644 (file)
@@ -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;
 
index 8c6d612012b4726a07d6b9173d8df6b1f704bdd6..31098f304fd348e603b3c9456ffa3cc0d934a832 100644 (file)
@@ -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).
        */
index 10554e6becda4645c8a466b8b0bb3aee76984e4f..fa529c9a7eb79f12227813c6083a848d602b4373 100644 (file)
@@ -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