From 98a1a96f3244de660f5434a6816f2ddd36a38513 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 2 Jul 2017 15:29:57 +0200 Subject: Add control-focus notifications from bindable GUI widgets. --- gtk2_ardour/ardour_button.cc | 9 +++++++++ gtk2_ardour/ardour_knob.cc | 9 +++++++++ gtk2_ardour/mono_panner.cc | 1 - gtk2_ardour/mono_panner.h | 5 +++++ gtk2_ardour/panner_interface.cc | 10 ++++++++++ gtk2_ardour/panner_interface.h | 6 ++++++ gtk2_ardour/stereo_panner.cc | 1 - gtk2_ardour/stereo_panner.h | 5 +++++ 8 files changed, 44 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 9aaf31ba76..3ec9d770d9 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -1144,6 +1144,11 @@ ArdourButton::on_enter_notify_event (GdkEventCrossing* ev) CairoWidget::set_dirty (); } + boost::shared_ptr c (binding_proxy.get_controllable ()); + if (c) { + PBD::Controllable::GUIFocusChanged (boost::weak_ptr (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 ()); + } + return CairoWidget::on_leave_notify_event (ev); } diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc index eb087dde04..25d9c44630 100644 --- a/gtk2_ardour/ardour_knob.cc +++ b/gtk2_ardour/ardour_knob.cc @@ -539,6 +539,11 @@ ArdourKnob::on_enter_notify_event (GdkEventCrossing* ev) set_dirty (); + boost::shared_ptr c (binding_proxy.get_controllable ()); + if (c) { + PBD::Controllable::GUIFocusChanged (boost::weak_ptr (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 ()); + } + return CairoWidget::on_leave_notify_event (ev); } diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc index 778af0b582..c106bd9582 100644 --- a/gtk2_ardour/mono_panner.cc +++ b/gtk2_ardour/mono_panner.cc @@ -25,7 +25,6 @@ #include #include -#include "pbd/controllable.h" #include "pbd/compose.h" #include "gtkmm2ext/gui_thread.h" diff --git a/gtk2_ardour/mono_panner.h b/gtk2_ardour/mono_panner.h index 4a0c2a4c59..aef11d9c7a 100644 --- a/gtk2_ardour/mono_panner.h +++ b/gtk2_ardour/mono_panner.h @@ -55,6 +55,11 @@ protected: bool on_scroll_event (GdkEventScroll*); bool on_key_press_event (GdkEventKey*); + boost::weak_ptr proxy_controllable () const + { + return boost::weak_ptr (position_binder.get_controllable()); + } + private: PannerEditor* editor (); boost::shared_ptr _panner_shell; diff --git a/gtk2_ardour/panner_interface.cc b/gtk2_ardour/panner_interface.cc index 08b9a1bc15..e0dfb35919 100644 --- a/gtk2_ardour/panner_interface.cc +++ b/gtk2_ardour/panner_interface.cc @@ -20,6 +20,9 @@ #include #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 ()); + } return false; } diff --git a/gtk2_ardour/panner_interface.h b/gtk2_ardour/panner_interface.h index eb2ee4334e..07d14abf03 100644 --- a/gtk2_ardour/panner_interface.h +++ b/gtk2_ardour/panner_interface.h @@ -24,8 +24,13 @@ #include #include #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 proxy_controllable () const = 0; void value_change (); diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc index d528cb1993..b825c01fd1 100644 --- a/gtk2_ardour/stereo_panner.cc +++ b/gtk2_ardour/stereo_panner.cc @@ -24,7 +24,6 @@ #include #include -#include "pbd/controllable.h" #include "pbd/compose.h" #include "gtkmm2ext/gui_thread.h" diff --git a/gtk2_ardour/stereo_panner.h b/gtk2_ardour/stereo_panner.h index aea2ca19ed..d897bd3644 100644 --- a/gtk2_ardour/stereo_panner.h +++ b/gtk2_ardour/stereo_panner.h @@ -58,6 +58,11 @@ protected: bool on_scroll_event (GdkEventScroll*); bool on_key_press_event (GdkEventKey*); + boost::weak_ptr proxy_controllable () const + { + return boost::weak_ptr (position_binder.get_controllable()); + } + private: PannerEditor* editor (); boost::shared_ptr _panner_shell; -- cgit v1.2.3