search: when polling the keyboard, consume all waiting keystrokes

When during searching we look at the keyboard, then don't look at
just the first keystroke, but check if there are more, and if so,
check each one until we find a Cancel -- or until all keystrokes
have been consumed and we can continue.

This fixes the first half of https://savannah.gnu.org/bugs/?47438.
master
Benno Schulenberg 2016-05-05 22:12:24 +02:00
parent c918c6563b
commit 9cbe6a640c
1 changed files with 8 additions and 4 deletions

View File

@ -292,10 +292,14 @@ int findnextstr(
lastkbcheck = time(NULL);
if (input && func_from_key(&input) == do_cancel) {
statusbar(_("Cancelled"));
disable_nodelay();
return -2;
/* Consume all waiting keystrokes until a Cancel. */
while (input) {
if (func_from_key(&input) == do_cancel) {
statusbar(_("Cancelled"));
disable_nodelay();
return -2;
}
input = parse_kbinput(NULL);
}
if (++feedback > 0)