X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fgtkmm2ext%2Fbinding_proxy.cc;h=f12c64cf68973a0bf39a626ee5167abdb2c60a8a;hb=f99dc6d2ab5acd69268f993ea2bb628d70728426;hp=6c60deaa8ffbd71c22ea7eeff054a46386b584b5;hpb=68e943265edf04e63a8e8b8f62bab20f99d9c637;p=ardour.git diff --git a/libs/gtkmm2ext/binding_proxy.cc b/libs/gtkmm2ext/binding_proxy.cc index 6c60deaa8f..f12c64cf68 100644 --- a/libs/gtkmm2ext/binding_proxy.cc +++ b/libs/gtkmm2ext/binding_proxy.cc @@ -40,6 +40,14 @@ BindingProxy::BindingProxy (boost::shared_ptr 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,7 +79,7 @@ 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 && (ev->state & bind_statemask) && ev->button == bind_button) { if (Controllable::StartLearning (controllable.get())) { string prompt = _("operate controller now"); if (prompter == 0) { @@ -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.get()); + if (controllable) { + Controllable::StopLearning (controllable.get()); + } return false; }