diff --git a/src/prompt.c b/src/prompt.c
index dec6692cfde679034ae12f7f90dcc3293621eecc..2aa8a437278af3e36512960d1685cf219016aabd 100644
--- a/src/prompt.c
+++ b/src/prompt.c
@@ -685,7 +685,6 @@ int do_yesno_prompt(bool all, const char *msg)
 
     while (response == -2) {
 	int kbinput;
-	functionptrtype func;
 
 	if (!ISSET(NO_HELP)) {
 	    char shortstr[MAXCHARLEN + 2];
@@ -728,9 +727,14 @@ int do_yesno_prompt(bool all, const char *msg)
 	/* When not replacing, show the cursor while waiting for a key. */
 	kbinput = get_kbinput(bottomwin, !all);
 
-	func = func_from_key(&kbinput);
-
-	if (func == do_cancel)
+	/* See if the pressed key is in the Yes, No, or All strings. */
+	if (strchr(yesstr, kbinput) != NULL)
+	    response = 1;
+	else if (strchr(nostr, kbinput) != NULL)
+	    response = 0;
+	else if (all && strchr(allstr, kbinput) != NULL)
+	    response = 2;
+	else if (func_from_key(&kbinput) == do_cancel)
 	    response = -1;
 #ifdef ENABLE_MOUSE
 	else if (kbinput == KEY_MOUSE) {
@@ -740,14 +744,9 @@ int do_yesno_prompt(bool all, const char *msg)
 			wmouse_trafo(bottomwin, &mouse_y, &mouse_x, FALSE) &&
 			mouse_x < (width * 2) && mouse_y > 0) {
 		int x = mouse_x / width;
-			/* The x-coordinate among the Yes/No/All shortcuts. */
 		int y = mouse_y - 1;
-			/* The y-coordinate among the Yes/No/All shortcuts. */
 
-		assert(0 <= x && x <= 1 && 0 <= y && y <= 1);
-
-		/* x == 0 means they clicked Yes or No.
-		 * y == 0 means Yes or All. */
+		/* x == 0 means Yes or No, y == 0 means Yes or All. */
 		response = -2 * x * y + x - y + 1;
 
 		if (response == 2 && !all)
@@ -755,15 +754,6 @@ int do_yesno_prompt(bool all, const char *msg)
 	    }
 	}
 #endif /* ENABLE_MOUSE */
-	else {
-	    /* Look for the kbinput in the Yes, No (and All) strings. */
-	    if (strchr(yesstr, kbinput) != NULL)
-		response = 1;
-	    else if (strchr(nostr, kbinput) != NULL)
-		response = 0;
-	    else if (all && strchr(allstr, kbinput) != NULL)
-		response = 2;
-	}
     }
 
     free(message);