#include <gtkmm2ext/binding_proxy.h>
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace Gtkmm2ext;
using namespace std;
using namespace PBD;
+guint BindingProxy::bind_button = 2;
+guint BindingProxy::bind_statemask = Gdk::CONTROL_MASK;
+
BindingProxy::BindingProxy (boost::shared_ptr<Controllable> c)
: prompter (0),
- controllable (c),
- bind_button (2),
- bind_statemask (Gdk::CONTROL_MASK)
+ controllable (c)
+{
+}
-{
+BindingProxy::BindingProxy ()
+ : prompter (0)
+{
}
BindingProxy::~BindingProxy ()
}
}
+void
+BindingProxy::set_controllable (boost::shared_ptr<Controllable> c)
+{
+ learning_finished ();
+ controllable = c;
+}
+
void
BindingProxy::set_bind_button_state (guint button, guint statemask)
{
bind_statemask = statemask;
}
-void
-BindingProxy::get_bind_button_state (guint &button, guint &statemask)
+bool
+BindingProxy::is_bind_action (GdkEventButton *ev)
{
- button = bind_button;
- statemask = bind_statemask;
+ return ( (ev->state & bind_statemask) && ev->button == bind_button );
}
+
bool
BindingProxy::button_press_handler (GdkEventButton *ev)
{
- if ((ev->state & bind_statemask) && ev->button == bind_button) {
+ if ( controllable && is_bind_action(ev) ) {
if (Controllable::StartLearning (controllable.get())) {
string prompt = _("operate controller now");
if (prompter == 0) {
}
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;
}
-
+
return false;
}
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;
}