Add control-focus notifications from bindable GUI widgets.
authorRobin Gareus <robin@gareus.org>
Sun, 2 Jul 2017 13:29:57 +0000 (15:29 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 2 Jul 2017 16:19:13 +0000 (18:19 +0200)
gtk2_ardour/ardour_button.cc
gtk2_ardour/ardour_knob.cc
gtk2_ardour/mono_panner.cc
gtk2_ardour/mono_panner.h
gtk2_ardour/panner_interface.cc
gtk2_ardour/panner_interface.h
gtk2_ardour/stereo_panner.cc
gtk2_ardour/stereo_panner.h

index 9aaf31ba766c80c0670eb08bf72074e33beda62f..3ec9d770d97086198e3553c8e74b368efc9ff41b 100644 (file)
@@ -1144,6 +1144,11 @@ ArdourButton::on_enter_notify_event (GdkEventCrossing* ev)
                CairoWidget::set_dirty ();
        }
 
+       boost::shared_ptr<PBD::Controllable> c (binding_proxy.get_controllable ());
+       if (c) {
+               PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> (c));
+       }
+
        return CairoWidget::on_enter_notify_event (ev);
 }
 
@@ -1156,6 +1161,10 @@ ArdourButton::on_leave_notify_event (GdkEventCrossing* ev)
                CairoWidget::set_dirty ();
        }
 
+       if (binding_proxy.get_controllable()) {
+               PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> ());
+       }
+
        return CairoWidget::on_leave_notify_event (ev);
 }
 
index eb087dde041a012e20031cc87373c183edbda2e9..25d9c4463022683a857d191eab5e31ae5f81d076 100644 (file)
@@ -539,6 +539,11 @@ ArdourKnob::on_enter_notify_event (GdkEventCrossing* ev)
 
        set_dirty ();
 
+       boost::shared_ptr<PBD::Controllable> c (binding_proxy.get_controllable ());
+       if (c) {
+               PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> (c));
+       }
+
        return CairoWidget::on_enter_notify_event (ev);
 }
 
@@ -549,6 +554,10 @@ ArdourKnob::on_leave_notify_event (GdkEventCrossing* ev)
 
        set_dirty ();
 
+       if (binding_proxy.get_controllable()) {
+               PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> ());
+       }
+
        return CairoWidget::on_leave_notify_event (ev);
 }
 
index 778af0b582d39e1ae6ecab85f2192466d7c76fdf..c106bd958229ef15789da80b7d7e33bd89389eef 100644 (file)
@@ -25,7 +25,6 @@
 #include <gtkmm/window.h>
 #include <pangomm/layout.h>
 
-#include "pbd/controllable.h"
 #include "pbd/compose.h"
 
 #include "gtkmm2ext/gui_thread.h"
index 4a0c2a4c59aeab46522d799e6fe24fd6d09c3906..aef11d9c7a576b7419b65c5728d7399bdd2b42d4 100644 (file)
@@ -55,6 +55,11 @@ protected:
        bool on_scroll_event (GdkEventScroll*);
        bool on_key_press_event (GdkEventKey*);
 
+       boost::weak_ptr<PBD::Controllable> proxy_controllable () const
+       {
+               return boost::weak_ptr<PBD::Controllable> (position_binder.get_controllable());
+       }
+
 private:
        PannerEditor* editor ();
        boost::shared_ptr<ARDOUR::PannerShell> _panner_shell;
index 08b9a1bc15432ae8cbf5d641caaf340b781c5c3b..e0dfb359196974ad784642ffd3cd15b53985387e 100644 (file)
@@ -20,6 +20,9 @@
 #include <gtkmm.h>
 #include "gtkmm2ext/keyboard.h"
 #include "gtkmm2ext/persistent_tooltip.h"
+
+#include "pbd/controllable.h"
+
 #include "panner_interface.h"
 #include "panner_editor.h"
 
@@ -56,6 +59,10 @@ PannerInterface::on_enter_notify_event (GdkEventCrossing *)
 {
        grab_focus ();
        Keyboard::magic_widget_grab_focus ();
+
+       if (!proxy_controllable ().expired ()) {
+               PBD::Controllable::GUIFocusChanged (proxy_controllable ());
+       }
        return false;
 }
 
@@ -63,6 +70,9 @@ bool
 PannerInterface::on_leave_notify_event (GdkEventCrossing *)
 {
        Keyboard::magic_widget_drop_focus ();
+       if (!proxy_controllable ().expired ()) {
+               PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> ());
+       }
        return false;
 }
 
index eb2ee4334ed0f135f536d82cfe8ed59e2734b4e2..07d14abf03923dae37ad20a74377be894fcc3669 100644 (file)
 #include <gtkmm/drawingarea.h>
 #include <gtkmm/label.h>
 #include "gtkmm2ext/persistent_tooltip.h"
+
 #include "pbd/destructible.h"
 
+namespace PBD {
+       class Controllable;
+}
+
 namespace ARDOUR {
        class Panner;
 }
@@ -63,6 +68,7 @@ public:
 
 protected:
        virtual void set_tooltip () = 0;
+       virtual boost::weak_ptr<PBD::Controllable> proxy_controllable () const = 0;
 
        void value_change ();
 
index d528cb19935ce1a676ea64ddb473a155ebdf2f65..b825c01fd1f5ad3877ff677081043e2f9ea7d65b 100644 (file)
@@ -24,7 +24,6 @@
 #include <gtkmm/window.h>
 #include <pangomm/layout.h>
 
-#include "pbd/controllable.h"
 #include "pbd/compose.h"
 
 #include "gtkmm2ext/gui_thread.h"
index aea2ca19edb1e0f7ccbd54d5874ff538f03df74a..d897bd3644c84ff8e754f49d367a09a9218c9fc0 100644 (file)
@@ -58,6 +58,11 @@ protected:
        bool on_scroll_event (GdkEventScroll*);
        bool on_key_press_event (GdkEventKey*);
 
+       boost::weak_ptr<PBD::Controllable> proxy_controllable () const
+       {
+               return boost::weak_ptr<PBD::Controllable> (position_binder.get_controllable());
+       }
+
 private:
        PannerEditor* editor ();
        boost::shared_ptr<ARDOUR::PannerShell> _panner_shell;