summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-07-02 22:48:39 +0200
committerRobin Gareus <robin@gareus.org>2017-07-02 22:48:39 +0200
commit3a423839755ad0889bafea501c61ac8ab98f572e (patch)
tree5b814c33efd325ffef37b23decf47aef7685c14d /libs/gtkmm2ext
parentb942c76df918e68328b8220b0aa3eb47afb69f52 (diff)
Add binding-proxy to ClickBox
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r--libs/gtkmm2ext/click_box.cc23
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/click_box.h15
2 files changed, 37 insertions, 1 deletions
diff --git a/libs/gtkmm2ext/click_box.cc b/libs/gtkmm2ext/click_box.cc
index 876c68f665..0c7a1c7366 100644
--- a/libs/gtkmm2ext/click_box.cc
+++ b/libs/gtkmm2ext/click_box.cc
@@ -24,6 +24,8 @@
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/click_box.h>
+#include "pbd/controllable.h"
+
using namespace std;
using namespace Gtk;
using namespace Gtkmm2ext;
@@ -57,6 +59,9 @@ ClickBox::~ClickBox ()
bool
ClickBox::button_press_handler (GdkEventButton* ev)
{
+ if (_binding_proxy.button_press_handler (ev)) {
+ return true;
+ }
add_modal_grab();
AutoSpin::button_press (ev);
return true;
@@ -164,3 +169,21 @@ ClickBox::set_printer (sigc::slot<bool, char *, Gtk::Adjustment &> p)
set_label ();
}
+bool
+ClickBox::on_enter_notify_event (GdkEventCrossing* ev)
+{
+ boost::shared_ptr<PBD::Controllable> c (_binding_proxy.get_controllable ());
+ if (c) {
+ PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> (c));
+ }
+ return false;
+}
+
+bool
+ClickBox::on_leave_notify_event (GdkEventCrossing* ev)
+{
+ if (_binding_proxy.get_controllable()) {
+ PBD::Controllable::GUIFocusChanged (boost::weak_ptr<PBD::Controllable> ());
+ }
+ return false;
+}
diff --git a/libs/gtkmm2ext/gtkmm2ext/click_box.h b/libs/gtkmm2ext/gtkmm2ext/click_box.h
index 5c56a1b3e8..b0b3896617 100644
--- a/libs/gtkmm2ext/gtkmm2ext/click_box.h
+++ b/libs/gtkmm2ext/gtkmm2ext/click_box.h
@@ -27,8 +27,13 @@
#include <string>
#include <gtkmm.h>
-#include "gtkmm2ext/visibility.h"
#include "gtkmm2ext/auto_spin.h"
+#include "gtkmm2ext/binding_proxy.h"
+#include "gtkmm2ext/visibility.h"
+
+namespace PBD {
+ class Controllable;
+}
namespace Gtkmm2ext {
@@ -45,8 +50,16 @@ class LIBGTKMM2EXT_API ClickBox : public Gtk::DrawingArea, public AutoSpin
*/
void set_printer (sigc::slot<bool, char *, Gtk::Adjustment &>);
+ void set_controllable (boost::shared_ptr<PBD::Controllable> c) {
+ _binding_proxy.set_controllable (c);
+ }
+
protected:
bool on_expose_event (GdkEventExpose*);
+ bool on_enter_notify_event (GdkEventCrossing* ev);
+ bool on_leave_notify_event (GdkEventCrossing* ev);
+
+ BindingProxy _binding_proxy;
private:
Glib::RefPtr<Pango::Layout> layout;