I just had to build some debounce hardware for a special application. This hardware worked by grabbing the first change on the signal, and holding that value for a period of time, before allowing any subsequent change. Works really well. And it is immediately responsive.
In the case of a soft button, you could apply the same thing:
Watch for a change. If you detect a change on the button, assume it was deliberate and run the code.
Simultaneously lock that button out from subsequent changes for some period of time (75ms, 100 ms, etc.).
If after the lock out period you detect another change, do the same (It will most likely be the release...).
By doing so, you get immediate responses from the screen, but prevent bounce after the fact.