Merged with trunk R1612.
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / bindable_button.h
index 193612540551db5d4873cc4d4aa6b2a56df82f91..2ddd3628fc30177933920542af3e02d0b4a42642 100644 (file)
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __bindable_button_h__
@@ -30,15 +29,46 @@ namespace PBD {
        class Controllable;
 }
 
-class BindableToggleButton : public Gtk::ToggleButton
+class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton
 {
    public:
        BindableToggleButton (PBD::Controllable& c) : binding_proxy (c) {}
-       explicit BindableToggleButton (PBD::Controllable& c, const std::string &label) : Gtk::ToggleButton (label), binding_proxy (c) {}
+
+       explicit BindableToggleButton (PBD::Controllable& c, const std::string &label)
+               : Gtkmm2ext::StatefulToggleButton (label), binding_proxy (c) {}
+
        virtual ~BindableToggleButton() {}
        
        bool on_button_press_event (GdkEventButton *ev) {
-               return binding_proxy.button_press_handler (ev);
+               if (!binding_proxy.button_press_handler (ev)) {
+                       StatefulToggleButton::on_button_press_event (ev);
+                       return false;
+               } else {
+                       return true;
+               }
+       }
+
+  private:
+       BindingProxy binding_proxy;
+};
+
+class BindableButton : public Gtkmm2ext::StatefulButton
+{
+   public:
+       BindableButton (PBD::Controllable& c) : binding_proxy (c) {}
+
+       explicit BindableButton (PBD::Controllable& c, const std::string &label)
+               : Gtkmm2ext::StatefulButton (label), binding_proxy (c) {}
+
+       ~BindableButton() {}
+       
+       bool on_button_press_event (GdkEventButton *ev) {
+               if (!binding_proxy.button_press_handler (ev)) {
+                       StatefulButton::on_button_press_event (ev);
+                       return false;
+               } else {
+                       return true;
+               }
        }
 
   private: