Introduce Ctrl+Shift+Click on lock solo in the mixer.
authorAndré Nusser <nusser@fmi.uni-stuttgart.de>
Mon, 28 Sep 2015 16:38:33 +0000 (18:38 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 28 Sep 2015 21:58:40 +0000 (17:58 -0400)
gtk2_ardour/route_ui.cc

index 1a5bd073ce7fc8e14d768a0fbea14a89e50da167..216a3bd441a94bc2abc16e18725a2e2326e6a5c3 100644 (file)
@@ -1452,9 +1452,38 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev)
 bool
 RouteUI::solo_safe_button_release (GdkEventButton* ev)
 {
+       if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+               return true;
+       }
+
+       bool view = solo_safe_led->active_state();
+       bool model = _route->solo_safe();
+
        if (ev->button == 1) {
-               _route->set_solo_safe (!solo_safe_led->active_state(), this);
+               if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
+                       boost::shared_ptr<RouteList> rl (_session->get_routes());
+                       if (model) {
+                               /* disable solo safe for all routes */
+                               DisplaySuspender ds;
+                               for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+                                       (*i)->set_solo_safe (false, this);
+                               }
+                       } else {
+                               /* enable solo safe for all routes */
+                               DisplaySuspender ds;
+                               for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
+                                       (*i)->set_solo_safe (true, this);
+                               }
+                       }
+               }
+               else {
+                       if (model == view) {
+                               /* flip just this route */
+                               _route->set_solo_safe (!view, this);
+                       }
+               }
        }
+
        return false;
 }