ArdourButton: ignore double+tripple clicks
authorRobin Gareus <robin@gareus.org>
Wed, 29 Nov 2017 11:04:19 +0000 (12:04 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 29 Nov 2017 11:06:42 +0000 (12:06 +0100)
libs/widgets/ardour_button.cc

index ebd23b2aac3b590496eea9f1b2ce1c03bb3fd6b2..d3598794498d0f2b539e9ddd60658e04c0cc5531 100644 (file)
@@ -853,6 +853,10 @@ ArdourButton::on_button_press_event (GdkEventButton *ev)
 {
        focus_handler (this);
 
+       if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+               return _fallthrough_to_parent ? false : true;
+       }
+
        if (ev->button == 1 && (_elements & Indicator) && _led_rect && _distinct_led_click) {
                if (ev->x >= _led_rect->x && ev->x < _led_rect->x + _led_rect->width &&
                    ev->y >= _led_rect->y && ev->y < _led_rect->y + _led_rect->height) {
@@ -874,15 +878,15 @@ ArdourButton::on_button_press_event (GdkEventButton *ev)
                }
        }
 
-       if (_fallthrough_to_parent)
-               return false;
-
-       return true;
+       return _fallthrough_to_parent ? false : true;
 }
 
 bool
 ArdourButton::on_button_release_event (GdkEventButton *ev)
 {
+       if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+               return _fallthrough_to_parent ? false : true;
+       }
        if (ev->button == 1 && _hovering && (_elements & Indicator) && _led_rect && _distinct_led_click) {
                if (ev->x >= _led_rect->x && ev->x < _led_rect->x + _led_rect->width &&
                    ev->y >= _led_rect->y && ev->y < _led_rect->y + _led_rect->height) {
@@ -904,10 +908,7 @@ ArdourButton::on_button_release_event (GdkEventButton *ev)
                }
        }
 
-       if (_fallthrough_to_parent)
-               return false;
-
-       return true;
+       return _fallthrough_to_parent ? false : true;
 }
 
 void