Describe the bug
When I have just a 'three finger tap' shortcut configured, it executes basically instantly.
I just created a 'three dinger double-tap' shortcut as a test, and it causes the 'three finger tap' shortcut to delay execution (which makes sense, since it will need to wait to determine if it was a single or double tap)
If I add a modifier key so that the double-tap shortcut only runs when I'm holding eg. Shift, the single-tap shortcut still runs slowly, even when I'm not holding the modifier key. I would have expected it to know that it doesn't need to wait to determine if it's a double-tap since the modifier key wasn't being held.
Similarly, if I disable the double-tap shortcut all-together, the single-tap shortcut still runs slowly; even though there is no need for it to wait and see if there was a double-tap before executing.
If I delete the double-tap shortcut, the single-tap shortcut runs quickly again.
That's expected and probably all double tap implementations have this issue. The problem is, to know whether the single tap gesture can be executed - BTT needs to wait until the double-tap timeout has passed. Otherwise a double tap would always also execute a single tap. It's the same for macOS when you use tap to click. You can change the double tap delay here:
@Andreas_Hegenberg I understand that that's how it needs to work WHEN the double-tap is likely to happen; but as I explicitly mentioned in my original detailed explanation, there are cases where the double-tap will NEVER be possible, and thus there should be no delay:
if I have a modifier key configured on the double-tap, that isn't configured on the single-tap, there should be no delay
if the double-tap is disabled, there should be no delay
These are the cases that I consider to be the bugs.
Reducing the delay required in the settings is an ok'ish workaround in the meantime; but it still makes me not want to configure double-taps due to the delay it requires.
Unfortunately I most likely won't be able to fix the modifier case, as BTT doesn't evaluate the trigger availabilities dynamically. It could also lead to weird behavior when eg. releasing the modifier key before the timeout has ended. It could be done, but I don't think it's feasible right now.
If you really want this you could use the "run real java script" action and implement specific logic for this use case. It would require my latest development build, but it could be achieved with a few lines of code there.
Glad to hear that the disabled case is fixed in the new development build!
Totally understand that the modifier case would be too hard to fix given the architecture/implementation.
What aspects of the new development build would be required to implement it using 'run real javascript' out of curiosity? And do you have a high level thought of how it could work with that? (even just pseudocode/the relevant function calls/variables/etc would be sufficient for me to get an idea of how to approach it)
The development build allows you to query the currently pressed keys and has new functionality to delay the execution of named triggers / cancel the execution within the delay time.
You could do something like this (not functional, but to show the principle):
No, this is something different. The "run real java script" action is already there and can be assigned to any trigger. However while developing the generic device support feature I extended & improved it a bit.