Fix crash on close after Mackie modifications by making it use AbstractUI so that invalidation of signals works properly.
git-svn-id: svn://localhost/ardour2/branches/3.0@10138 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
daf5203f58
commit
2206a60a10
@ -75,8 +75,12 @@ MackieMidiBuilder builder;
|
||||
#define midi_ui_context() MidiControlUI::instance() /* a UICallback-derived object that specifies the event loop for signal handling */
|
||||
#define ui_bind(f, ...) boost::protect (boost::bind (f, __VA_ARGS__))
|
||||
|
||||
extern PBD::EventLoop::InvalidationRecord* __invalidator (sigc::trackable& trackable, const char*, int);
|
||||
#define invalidator(x) __invalidator ((x), __FILE__, __LINE__)
|
||||
|
||||
MackieControlProtocol::MackieControlProtocol (Session& session)
|
||||
: ControlProtocol (session, X_("Mackie"), MidiControlUI::instance())
|
||||
, AbstractUI<MackieControlUIRequest> ("mackie")
|
||||
, _current_initial_bank (0)
|
||||
, _surface (0)
|
||||
, _jog_wheel (*this)
|
||||
@ -88,7 +92,7 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
|
||||
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
|
||||
|
||||
AudioEngine::instance()->PortConnectedOrDisconnected.connect (
|
||||
audio_engine_connections, MISSING_INVALIDATOR, ui_bind (&MackieControlProtocol::port_connected_or_disconnected, this, _2, _4, _5),
|
||||
audio_engine_connections, invalidator (*this), ui_bind (&MackieControlProtocol::port_connected_or_disconnected, this, _2, _4, _5),
|
||||
midi_ui_context ()
|
||||
);
|
||||
}
|
||||
@ -715,7 +719,7 @@ MackieControlProtocol::get_state()
|
||||
|
||||
// add name of protocol
|
||||
XMLNode* node = new XMLNode (X_("Protocol"));
|
||||
node->add_property (X_("name"), _name);
|
||||
node->add_property (X_("name"), ARDOUR::ControlProtocol::_name);
|
||||
|
||||
// add current bank
|
||||
ostringstream os;
|
||||
@ -1696,3 +1700,24 @@ MackieControlProtocol::port_connected_or_disconnected (string a, string b, bool
|
||||
update_surface ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MackieControlProtocol::do_request (MackieControlUIRequest* req)
|
||||
{
|
||||
if (req->type == CallSlot) {
|
||||
|
||||
call_slot (MISSING_INVALIDATOR, req->the_slot);
|
||||
|
||||
} else if (req->type == Quit) {
|
||||
|
||||
stop ();
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
MackieControlProtocol::stop ()
|
||||
{
|
||||
BaseUI::quit ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -68,8 +68,15 @@ namespace Mackie {
|
||||
the Route and encoded as the correct midi message.
|
||||
*/
|
||||
|
||||
struct MackieControlUIRequest : public BaseUI::BaseRequestObject {
|
||||
public:
|
||||
MackieControlUIRequest () {}
|
||||
~MackieControlUIRequest () {}
|
||||
};
|
||||
|
||||
class MackieControlProtocol
|
||||
: public ARDOUR::ControlProtocol
|
||||
, public AbstractUI<MackieControlUIRequest>
|
||||
, public Mackie::MackieButtonHandler
|
||||
{
|
||||
public:
|
||||
@ -306,6 +313,9 @@ class MackieControlProtocol
|
||||
boost::shared_ptr<ARDOUR::Route> master_route();
|
||||
Mackie::Strip & master_strip();
|
||||
|
||||
void do_request (MackieControlUIRequest*);
|
||||
int stop ();
|
||||
|
||||
private:
|
||||
|
||||
void port_connected_or_disconnected (std::string, std::string, bool);
|
||||
|
Loading…
Reference in New Issue
Block a user