Add binding-proxy to ClickBox
authorRobin Gareus <robin@gareus.org>
Sun, 2 Jul 2017 20:48:39 +0000 (22:48 +0200)
committerRobin Gareus <robin@gareus.org>
Sun, 2 Jul 2017 20:48:39 +0000 (22:48 +0200)
libs/gtkmm2ext/click_box.cc
libs/gtkmm2ext/gtkmm2ext/click_box.h

index 876c68f665240a6800d356eaef1c08738b46ade3..0c7a1c736678e1af494e4fb6544b7d47da7ea07d 100644 (file)
@@ -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;
+}
index 5c56a1b3e8ce858028fb13def95d2097ade53fcd..b0b38966171615acbd6adefc4c86ffd8ea926c1c 100644 (file)
 #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;