mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-06 13:45:43 +01:00
Connect to controllable->Destroyed in all cases; fixes crash on route removal.
git-svn-id: svn://localhost/ardour2/branches/3.0@12959 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
e09e185e3e
commit
b97a1bfb97
1 changed files with 17 additions and 8 deletions
|
|
@ -61,11 +61,12 @@ MIDIControllable::MIDIControllable (GenericMidiControlProtocol* s, Port& p, bool
|
|||
|
||||
MIDIControllable::MIDIControllable (GenericMidiControlProtocol* s, Port& p, Controllable& c, bool m)
|
||||
: _surface (s)
|
||||
, controllable (&c)
|
||||
, _descriptor (0)
|
||||
, _port (p)
|
||||
, _momentary (m)
|
||||
{
|
||||
set_controllable (&c);
|
||||
|
||||
_learned = true; /* from controllable */
|
||||
setting = false;
|
||||
last_value = 0; // got a better idea ?
|
||||
|
|
@ -113,7 +114,19 @@ MIDIControllable::drop_external_control ()
|
|||
void
|
||||
MIDIControllable::set_controllable (Controllable* c)
|
||||
{
|
||||
if (c == controllable) {
|
||||
return;
|
||||
}
|
||||
|
||||
controllable_death_connection.disconnect ();
|
||||
|
||||
controllable = c;
|
||||
|
||||
if (controllable) {
|
||||
controllable->Destroyed.connect (controllable_death_connection, MISSING_INVALIDATOR,
|
||||
boost::bind (&MIDIControllable::drop_controllable, this),
|
||||
MidiControlUI::instance());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -199,10 +212,7 @@ MIDIControllable::lookup_controllable()
|
|||
return -1;
|
||||
}
|
||||
|
||||
controllable = c.get();
|
||||
controllable->Destroyed.connect (controllable_death_connection, MISSING_INVALIDATOR,
|
||||
boost::bind (&MIDIControllable::drop_controllable, this),
|
||||
MidiControlUI::instance());
|
||||
set_controllable (c.get ());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -210,9 +220,8 @@ MIDIControllable::lookup_controllable()
|
|||
void
|
||||
MIDIControllable::drop_controllable ()
|
||||
{
|
||||
cerr << "removed controllable\n";
|
||||
controllable_death_connection.disconnect ();
|
||||
controllable = 0;
|
||||
cerr << "removed controllable " << controllable << "\n";
|
||||
set_controllable (0);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue