fix binding to long-press for User button on FaderPort
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 26 Mar 2018 17:56:50 +0000 (13:56 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 26 Mar 2018 17:56:50 +0000 (13:56 -0400)
libs/surfaces/faderport/faderport.cc

index 962678735ecab85c988cb4047433ac6a3133b1a0..9896997640a3544aba79e3a50a1e6fed11d19d09 100644 (file)
@@ -364,6 +364,9 @@ FaderPort::button_handler (MIDI::Parser &, MIDI::EventTwoBytes* tb)
                break;
        case User:
                bs = UserDown;
+               if (tb->value) {
+                       start_press_timeout (button, id);
+               }
                break;
        case FaderTouch:
                fader_is_touched = tb->value;
@@ -966,6 +969,13 @@ FaderPort::Button::set_action (string const& name, bool when_pressed, FaderPort:
                if (name.empty()) {
                        on_release.erase (bs);
                } else {
+                       if (id == User) {
+                               /* if the binding is for the User button, we
+                                  need to store the button state as it will be
+                                  seen on button release, which will include UserDown.
+                               */
+                               bs = FaderPort::ButtonState (bs|UserDown);
+                       }
                        DEBUG_TRACE (DEBUG::FaderPort, string_compose ("set button %1 to action %2 on release + %3%4%5\n", id, name, bs));
                        todo.action_name = name;
                        on_release[bs] = todo;