summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-05-05 15:47:51 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-05-05 15:47:51 +0000
commit3fa522e5df8401e8351c9a87f2f761f87a87a31a (patch)
treed1d8d74d7cc2500b00389abf7b207cd4fbb835a9
parent25704da3210166daabb1a4fae7d490a4be16c3de (diff)
make "exclusive solo" apply to listen as well as SiP
git-svn-id: svn://localhost/ardour2/branches/3.0@7064 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/rc_option_editor.cc19
-rw-r--r--libs/ardour/route.cc5
-rw-r--r--libs/ardour/session.cc14
3 files changed, 32 insertions, 6 deletions
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index 1bc4f0a252..a53e988712 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -3,9 +3,13 @@
#include <gtkmm/scale.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/slider_controller.h>
+
#include "pbd/fpu.h"
+
#include "midi++/manager.h"
#include "midi++/factory.h"
+
+#include "ardour/audioengine.h"
#include "ardour/dB.h"
#include "ardour/rc_configuration.h"
#include "ardour/control_protocol_manager.h"
@@ -443,10 +447,10 @@ static const struct {
{ "Command", GDK_META_MASK },
{ "Control", GDK_CONTROL_MASK },
{ "Option", GDK_MOD1_MASK },
- { "Command-Shift", GDK_MOD1_MASK|GDK_SHIFT_MASK },
- { "Command-Option", GDK_MOD1_MASK|GDK_MOD5_MASK },
- { "Shift-Option", GDK_SHIFT_MASK|GDK_MOD5_MASK },
- { "Shift-Command-Option", GDK_MOD5_MASK|GDK_SHIFT_MASK|GDK_MOD1_MASK },
+ { "Command-Shift", GDK_META_MASK|GDK_SHIFT_MASK },
+ { "Command-Option", GDK_MOD1_MASK|GDK_META_MASK },
+ { "Shift-Option", GDK_SHIFT_MASK|GDK_MOD1_MASK },
+ { "Shift-Command-Option", GDK_MOD5_MASK|GDK_SHIFT_MASK|GDK_META_MASK },
#else
{ "Shift", GDK_SHIFT_MASK },
@@ -1234,7 +1238,12 @@ RCOptionEditor::RCOptionEditor ()
sigc::mem_fun (*_rc_config, &RCConfiguration::set_monitoring_model)
);
- mm->add (HardwareMonitoring, _("JACK"));
+#ifndef __APPLE__
+ /* no JACK monitoring on CoreAudio */
+ if (AudioEngine::instance()->can_request_hardware_monitoring()) {
+ mm->add (HardwareMonitoring, _("JACK"));
+ }
+#endif
mm->add (SoftwareMonitoring, _("ardour"));
mm->add (ExternalMonitoring, _("audio hardware"));
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 7bd9157514..7eeae417d9 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -536,11 +536,14 @@ Route::set_listen (bool yn, void* src)
}
if (_monitor_send) {
+ cerr << name() << " set listen = " << yn << " current = " << _monitor_send->active() << endl;
if (yn != _monitor_send->active()) {
if (yn) {
_monitor_send->activate ();
- } else {
+ _mute_master->set_soloed (true);
+ } else {
_monitor_send->deactivate ();
+ _mute_master->set_soloed (false);
}
listen_changed (src); /* EMIT SIGNAL */
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 3fc0603a5b..0b796a32bf 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -2225,8 +2225,22 @@ Session::route_listen_changed (void* /*src*/, boost::weak_ptr<Route> wpr)
}
if (route->listening()) {
+
+ if (Config->get_exclusive_solo()) {
+ /* new listen: disable all other listen */
+ shared_ptr<RouteList> r = routes.reader ();
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i) == route || (*i)->solo_isolated() || (*i)->is_master() || (*i)->is_monitor() || (*i)->is_hidden()) {
+ continue;
+ }
+ (*i)->set_listen (false, this);
+ }
+ }
+
_listen_cnt++;
+
} else if (_listen_cnt > 0) {
+
_listen_cnt--;
}
}