diff options
author | Robin Gareus <robin@gareus.org> | 2017-07-02 22:48:39 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-07-02 22:48:39 +0200 |
commit | 3a423839755ad0889bafea501c61ac8ab98f572e (patch) | |
tree | 5b814c33efd325ffef37b23decf47aef7685c14d /libs/gtkmm2ext | |
parent | b942c76df918e68328b8220b0aa3eb47afb69f52 (diff) |
Add binding-proxy to ClickBox
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r-- | libs/gtkmm2ext/click_box.cc | 23 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/click_box.h | 15 |
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; |