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 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__))
|
#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)
|
MackieControlProtocol::MackieControlProtocol (Session& session)
|
||||||
: ControlProtocol (session, X_("Mackie"), MidiControlUI::instance())
|
: ControlProtocol (session, X_("Mackie"), MidiControlUI::instance())
|
||||||
|
, AbstractUI<MackieControlUIRequest> ("mackie")
|
||||||
, _current_initial_bank (0)
|
, _current_initial_bank (0)
|
||||||
, _surface (0)
|
, _surface (0)
|
||||||
, _jog_wheel (*this)
|
, _jog_wheel (*this)
|
||||||
@ -88,7 +92,7 @@ MackieControlProtocol::MackieControlProtocol (Session& session)
|
|||||||
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
|
DEBUG_TRACE (DEBUG::MackieControl, "MackieControlProtocol::MackieControlProtocol\n");
|
||||||
|
|
||||||
AudioEngine::instance()->PortConnectedOrDisconnected.connect (
|
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 ()
|
midi_ui_context ()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -715,7 +719,7 @@ MackieControlProtocol::get_state()
|
|||||||
|
|
||||||
// add name of protocol
|
// add name of protocol
|
||||||
XMLNode* node = new XMLNode (X_("Protocol"));
|
XMLNode* node = new XMLNode (X_("Protocol"));
|
||||||
node->add_property (X_("name"), _name);
|
node->add_property (X_("name"), ARDOUR::ControlProtocol::_name);
|
||||||
|
|
||||||
// add current bank
|
// add current bank
|
||||||
ostringstream os;
|
ostringstream os;
|
||||||
@ -1696,3 +1700,24 @@ MackieControlProtocol::port_connected_or_disconnected (string a, string b, bool
|
|||||||
update_surface ();
|
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.
|
the Route and encoded as the correct midi message.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
struct MackieControlUIRequest : public BaseUI::BaseRequestObject {
|
||||||
|
public:
|
||||||
|
MackieControlUIRequest () {}
|
||||||
|
~MackieControlUIRequest () {}
|
||||||
|
};
|
||||||
|
|
||||||
class MackieControlProtocol
|
class MackieControlProtocol
|
||||||
: public ARDOUR::ControlProtocol
|
: public ARDOUR::ControlProtocol
|
||||||
|
, public AbstractUI<MackieControlUIRequest>
|
||||||
, public Mackie::MackieButtonHandler
|
, public Mackie::MackieButtonHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -306,6 +313,9 @@ class MackieControlProtocol
|
|||||||
boost::shared_ptr<ARDOUR::Route> master_route();
|
boost::shared_ptr<ARDOUR::Route> master_route();
|
||||||
Mackie::Strip & master_strip();
|
Mackie::Strip & master_strip();
|
||||||
|
|
||||||
|
void do_request (MackieControlUIRequest*);
|
||||||
|
int stop ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void port_connected_or_disconnected (std::string, std::string, bool);
|
void port_connected_or_disconnected (std::string, std::string, bool);
|
||||||
|
Loading…
Reference in New Issue
Block a user