Use weak-pointer for Controllable learning
authorRobin Gareus <robin@gareus.org>
Sat, 23 Mar 2019 00:45:29 +0000 (01:45 +0100)
committerRobin Gareus <robin@gareus.org>
Sat, 23 Mar 2019 00:50:45 +0000 (01:50 +0100)
libs/pbd/controllable.cc
libs/pbd/pbd/controllable.h
libs/widgets/binding_proxy.cc

index 69a58b4d0eb5274e86ae9c25a78d3e279ef88af8..de1dab71a3b1fe7e96deb81f693a87b6e0b730be 100644 (file)
@@ -30,8 +30,8 @@ using namespace PBD;
 using namespace std;
 
 PBD::Signal1<void,Controllable*> Controllable::Destroyed;
-PBD::Signal1<bool,Controllable*> Controllable::StartLearning;
-PBD::Signal1<void,Controllable*> Controllable::StopLearning;
+PBD::Signal1<bool, boost::weak_ptr<PBD::Controllable> > Controllable::StartLearning;
+PBD::Signal1<void, boost::weak_ptr<PBD::Controllable> > Controllable::StopLearning;
 PBD::Signal1<void, boost::weak_ptr<PBD::Controllable> > Controllable::GUIFocusChanged;
 
 const std::string Controllable::xml_node_name = X_("Controllable");
index dbbea5dc5f8d7caae9f7921edbf944eada59dc5d..1cc4cdf083be4753c4d2a1f7ff148773fde62031 100644 (file)
@@ -123,8 +123,8 @@ public:
 
        PBD::Signal0<void> LearningFinished;
 
-       static PBD::Signal1<bool,PBD::Controllable*> StartLearning;
-       static PBD::Signal1<void,PBD::Controllable*> StopLearning;
+       static PBD::Signal1<bool, boost::weak_ptr<PBD::Controllable> > StartLearning;
+       static PBD::Signal1<void, boost::weak_ptr<PBD::Controllable> > StopLearning;
 
        static PBD::Signal1<void,Controllable*> Destroyed;
 
index 85119ab1c0876d5a3cec677e55d77b89fdb6b387..98f4443ad2456b36de5c6960da477caa6304f4c8 100644 (file)
@@ -91,7 +91,7 @@ bool
 BindingProxy::button_press_handler (GdkEventButton *ev)
 {
        if ( controllable && is_bind_action(ev) ) {
-               if (Controllable::StartLearning (controllable.get())) {
+               if (Controllable::StartLearning (controllable)) {
                        string prompt = _("operate controller now");
                        if (prompter == 0) {
                                prompter = new PopUp (Gtk::WIN_POS_MOUSE, 30000, false);
@@ -121,7 +121,7 @@ BindingProxy::prompter_hiding (GdkEventAny* /*ev*/)
 {
        learning_connection.disconnect ();
        if (controllable) {
-               Controllable::StopLearning (controllable.get());
+               Controllable::StopLearning (controllable);
        }
        return false;
 }