fix connection updates
authorRobin Gareus <robin@gareus.org>
Wed, 6 Apr 2016 11:32:06 +0000 (13:32 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 6 Apr 2016 11:32:06 +0000 (13:32 +0200)
gtk2_ardour/plugin_pin_dialog.cc
gtk2_ardour/plugin_pin_dialog.h

index f25dd6497b8dce34257f14afaf79bc396793ae59..04731933c19aa8f885e2d32793167c7f8b41d6b9 100644 (file)
@@ -210,6 +210,10 @@ PluginPinDialog::PluginPinDialog (boost::shared_ptr<ARDOUR::PluginInsert> pi)
        _del_output_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_remove_port_clicked), false, DataType::MIDI));
        _add_sc_audio.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_sidechain_port), DataType::AUDIO));
        _add_sc_midi.signal_clicked.connect (sigc::bind (sigc::mem_fun (*this, &PluginPinDialog::add_sidechain_port), DataType::MIDI));
+
+       AudioEngine::instance()->PortConnectedOrDisconnected.connect (
+                       _io_connection, invalidator (*this), boost::bind (&PluginPinDialog::port_connected_or_disconnected, this, _1, _3), gui_context ()
+                       );
 }
 
 PluginPinDialog::~PluginPinDialog ()
@@ -248,7 +252,6 @@ PluginPinDialog::plugin_reconfigured ()
                _sidechain_selector = 0;
        }
 
-       _io_connection.disconnect ();
        refill_sidechain_table ();
 
        /* update elements */
@@ -342,10 +345,6 @@ PluginPinDialog::refill_sidechain_table ()
                add_port_to_table (*i, r, can_remove);
        }
        _sidechain_tbl->show_all ();
-
-       io->changed.connect (
-                       _io_connection, invalidator (*this), boost::bind (&PluginPinDialog::io_changed_proxy, this), gui_context ()
-                       );
 }
 
 void
@@ -1104,7 +1103,6 @@ PluginPinDialog::disconnect_port (boost::weak_ptr<ARDOUR::Port> wp)
                return;
        }
        p->disconnect_all ();
-       io_changed_proxy ();
 }
 
 void
@@ -1118,7 +1116,6 @@ PluginPinDialog::connect_port (boost::weak_ptr<ARDOUR::Port> wp0, boost::weak_pt
                return;
        }
        p0->connect (p1->name ());
-       io_changed_proxy ();
 }
 
 bool
@@ -1207,7 +1204,18 @@ PluginPinDialog::maybe_add_route_to_input_menu (boost::shared_ptr<Route> r, Data
 }
 
 void
-PluginPinDialog::io_changed_proxy ()
+PluginPinDialog::port_connected_or_disconnected (boost::weak_ptr<ARDOUR::Port> w0, boost::weak_ptr<ARDOUR::Port> w1)
 {
-       Glib::signal_idle().connect_once (sigc::mem_fun (*this, &PluginPinDialog::plugin_reconfigured));
+       boost::shared_ptr<Port> p0 = w0.lock ();
+       boost::shared_ptr<Port> p1 = w1.lock ();
+
+       boost::shared_ptr<IO> io = _pi->sidechain_input ();
+       if (!io) { return; }
+
+       if (p0 && io->has_port (p0)) {
+               plugin_reconfigured ();
+       }
+       else if (p1 && io->has_port (p1)) {
+               plugin_reconfigured ();
+       }
 }
index 64cda8cdf1bf9f5811ae47311ea4df45028c2ac0..5c63b6dd0028777af0cfc95cbab9ed4ca303c120 100644 (file)
@@ -131,7 +131,7 @@ private:
        void disconnect_port (boost::weak_ptr<ARDOUR::Port>);
        void connect_port (boost::weak_ptr<ARDOUR::Port>, boost::weak_ptr<ARDOUR::Port>);
        uint32_t maybe_add_route_to_input_menu (boost::shared_ptr<ARDOUR::Route>, ARDOUR::DataType, boost::weak_ptr<ARDOUR::Port>);
-       void io_changed_proxy ();
+       void port_connected_or_disconnected (boost::weak_ptr<ARDOUR::Port>, boost::weak_ptr<ARDOUR::Port>);
 
        bool sc_input_press (GdkEventButton *, boost::weak_ptr<ARDOUR::Port>);
        bool sc_input_release (GdkEventButton *);