summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-07-02 15:29:57 +0200
committerRobin Gareus <robin@gareus.org>2017-07-02 18:19:13 +0200
commit98a1a96f3244de660f5434a6816f2ddd36a38513 (patch)
tree581444d9ff1eecd40ed41a16b4866006641d087f
parentc4fcb12d128857a0eaab7d2093d38fdf4cc641cc (diff)
Add control-focus notifications from bindable GUI widgets.
-rw-r--r--gtk2_ardour/ardour_button.cc9
-rw-r--r--gtk2_ardour/ardour_knob.cc9
-rw-r--r--gtk2_ardour/mono_panner.cc1
-rw-r--r--gtk2_ardour/mono_panner.h5
-rw-r--r--gtk2_ardour/panner_interface.cc10
-rw-r--r--gtk2_ardour/panner_interface.h6
-rw-r--r--gtk2_ardour/stereo_panner.cc1
-rw-r--r--gtk2_ardour/stereo_panner.h5
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<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);
}
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<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);
}
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 <gtkmm/window.h>
#include <pangomm/layout.h>
-#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<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;
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 <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;
}
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 <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 ();
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 <gtkmm/window.h>
#include <pangomm/layout.h>
-#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<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;