X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fgtkmm2ext%2Fbinding_proxy.cc;h=f12c64cf68973a0bf39a626ee5167abdb2c60a8a;hb=a1f858d3b207739e0719c1fc28003f1d9dd3965d;hp=90f95f82ef44b174d8241acc5ba477e91f357412;hpb=449aab3c465bbbf66d221fac3d7ea559f1720357;p=ardour.git diff --git a/libs/gtkmm2ext/binding_proxy.cc b/libs/gtkmm2ext/binding_proxy.cc index 90f95f82ef..f12c64cf68 100644 --- a/libs/gtkmm2ext/binding_proxy.cc +++ b/libs/gtkmm2ext/binding_proxy.cc @@ -31,7 +31,7 @@ using namespace Gtkmm2ext; using namespace std; using namespace PBD; -BindingProxy::BindingProxy (Controllable& c) +BindingProxy::BindingProxy (boost::shared_ptr c) : prompter (0), controllable (c), bind_button (2), @@ -40,6 +40,14 @@ BindingProxy::BindingProxy (Controllable& c) { } +BindingProxy::BindingProxy () + : prompter (0), + bind_button (2), + bind_statemask (Gdk::CONTROL_MASK) + +{ +} + BindingProxy::~BindingProxy () { if (prompter) { @@ -47,6 +55,13 @@ BindingProxy::~BindingProxy () } } +void +BindingProxy::set_controllable (boost::shared_ptr c) +{ + learning_finished (); + controllable = c; +} + void BindingProxy::set_bind_button_state (guint button, guint statemask) { @@ -64,8 +79,8 @@ BindingProxy::get_bind_button_state (guint &button, guint &statemask) bool BindingProxy::button_press_handler (GdkEventButton *ev) { - if ((ev->state & bind_statemask) && ev->button == bind_button) { - if (Controllable::StartLearning (&controllable)) { + if (controllable && (ev->state & bind_statemask) && ev->button == bind_button) { + if (Controllable::StartLearning (controllable.get())) { string prompt = _("operate controller now"); if (prompter == 0) { prompter = new PopUp (Gtk::WIN_POS_MOUSE, 30000, false); @@ -73,7 +88,7 @@ BindingProxy::button_press_handler (GdkEventButton *ev) } prompter->set_text (prompt); prompter->touch (); // shows popup - learning_connection = controllable.LearningFinished.connect (mem_fun (*this, &BindingProxy::learning_finished)); + controllable->LearningFinished.connect_same_thread (learning_connection, boost::bind (&BindingProxy::learning_finished, this)); } return true; } @@ -92,10 +107,12 @@ BindingProxy::learning_finished () bool -BindingProxy::prompter_hiding (GdkEventAny *ev) +BindingProxy::prompter_hiding (GdkEventAny */*ev*/) { learning_connection.disconnect (); - Controllable::StopLearning (&controllable); + if (controllable) { + Controllable::StopLearning (controllable.get()); + } return false; }