summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_strip.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/mixer_strip.cc')
-rw-r--r--gtk2_ardour/mixer_strip.cc35
1 files changed, 30 insertions, 5 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 2b260bcb5a..78d69ba6bf 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -407,7 +407,8 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
midi_input_enable_button = manage (new StatefulToggleButton);
midi_input_enable_button->set_name ("MixerMidiInputEnableButton");
midi_input_enable_button->set_image (*img);
- midi_input_enable_button->signal_toggled().connect (sigc::mem_fun (*this, &MixerStrip::midi_input_toggled));
+ midi_input_enable_button->signal_button_press_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_press), false);
+ midi_input_enable_button->signal_button_release_event().connect (sigc::mem_fun (*this, &MixerStrip::input_active_button_release), false);
ARDOUR_UI::instance()->set_tip (midi_input_enable_button, _("Enable/Disable MIDI input"));
} else {
input_button_box.remove (*midi_input_enable_button);
@@ -1915,16 +1916,40 @@ MixerStrip::hide_things ()
processor_box.hide_things ();
}
-void
-MixerStrip::midi_input_toggled ()
+bool
+MixerStrip::input_active_button_press (GdkEventButton* ev)
+{
+ /* nothing happens on press */
+ return true;
+}
+
+bool
+MixerStrip::input_active_button_release (GdkEventButton* ev)
{
boost::shared_ptr<MidiTrack> mt = midi_track ();
if (!mt) {
- return;
+ return true;
}
- mt->set_input_active (midi_input_enable_button->get_active());
+ if (mt->input_active()) {
+ if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
+ /* turn all other tracks using this input off */
+ _session->set_exclusive_input_active (mt, false);
+ } else {
+ mt->set_input_active (false);
+ }
+
+ } else {
+ if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
+ /* turn all other tracks using this input on */
+ _session->set_exclusive_input_active (mt, true);
+ } else {
+ mt->set_input_active (true);
+ }
+ }
+
+ return true;
}
void