derive TriggerUI from sigc::trackable so that it can be automically disconnected from signals
The explicit disconnect in the destructor prevents any more signal->connection firing, but the invalidator is required to remove existing queued slot calls in the receiving thread
This commit is contained in:
parent
87bcd4d83b
commit
11fd0b84b1
@ -77,6 +77,8 @@ TriggerUI::TriggerUI ()
|
|||||||
, _context_menu (0)
|
, _context_menu (0)
|
||||||
, _ignore_menu_action (false)
|
, _ignore_menu_action (false)
|
||||||
{
|
{
|
||||||
|
std::cerr << "CONSTRUCT TUI " << this << std::endl;
|
||||||
|
|
||||||
if (follow_strings.empty()) {
|
if (follow_strings.empty()) {
|
||||||
follow_strings.push_back (follow_action_to_string (FollowAction (FollowAction::None)));
|
follow_strings.push_back (follow_action_to_string (FollowAction (FollowAction::None)));
|
||||||
follow_strings.push_back (follow_action_to_string (FollowAction (FollowAction::Stop)));
|
follow_strings.push_back (follow_action_to_string (FollowAction (FollowAction::Stop)));
|
||||||
@ -119,6 +121,7 @@ TriggerUI::TriggerUI ()
|
|||||||
|
|
||||||
TriggerUI::~TriggerUI()
|
TriggerUI::~TriggerUI()
|
||||||
{
|
{
|
||||||
|
std::cerr << "DESTROY TUI " << this << std::endl;
|
||||||
trigger_swap_connection.disconnect ();
|
trigger_swap_connection.disconnect ();
|
||||||
trigger_connections.drop_connections ();
|
trigger_connections.drop_connections ();
|
||||||
}
|
}
|
||||||
@ -132,8 +135,8 @@ TriggerUI::trigger_swap (uint32_t n)
|
|||||||
}
|
}
|
||||||
trigger_connections.drop_connections ();
|
trigger_connections.drop_connections ();
|
||||||
|
|
||||||
trigger()->PropertyChanged.connect (trigger_connections, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context ());
|
trigger()->PropertyChanged.connect (trigger_connections, invalidator (*this), boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context ());
|
||||||
tref.box->PropertyChanged.connect (trigger_connections, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context ());
|
tref.box->PropertyChanged.connect (trigger_connections, invalidator (*this), boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context ());
|
||||||
|
|
||||||
trigger_changed (Properties::name);
|
trigger_changed (Properties::name);
|
||||||
}
|
}
|
||||||
@ -846,10 +849,10 @@ TriggerUI::set_trigger (ARDOUR::TriggerReference tr)
|
|||||||
|
|
||||||
trigger_changed (pc);
|
trigger_changed (pc);
|
||||||
|
|
||||||
trigger()->PropertyChanged.connect (trigger_connections, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context());
|
trigger()->PropertyChanged.connect (trigger_connections, invalidator (*this), boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context());
|
||||||
tref.box->PropertyChanged.connect (trigger_connections, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context ());
|
tref.box->PropertyChanged.connect (trigger_connections, invalidator (*this), boost::bind (&TriggerUI::trigger_changed, this, _1), gui_context ());
|
||||||
|
|
||||||
tref.box->TriggerSwapped.connect (trigger_swap_connection, MISSING_INVALIDATOR, boost::bind (&TriggerUI::trigger_swap, this, _1), gui_context ());
|
tref.box->TriggerSwapped.connect (trigger_swap_connection, invalidator (*this), boost::bind (&TriggerUI::trigger_swap, this, _1), gui_context ());
|
||||||
|
|
||||||
on_trigger_set(); //derived classes can do initialization here
|
on_trigger_set(); //derived classes can do initialization here
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ namespace Gtk
|
|||||||
|
|
||||||
class TriggerJumpDialog;
|
class TriggerJumpDialog;
|
||||||
|
|
||||||
class TriggerUI
|
class TriggerUI : virtual public sigc::trackable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerUI ();
|
TriggerUI ();
|
||||||
|
Loading…
Reference in New Issue
Block a user