From 305c6459e9a49aa3f88dbd5f14331b14ed5a0d31 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Wed, 2 Nov 2005 15:32:30 +0000
Subject: [PATCH] in do_yesno(), make mouse clicks on the Yes/No/All shortcuts
 work properly when the MORE_SPACE flag is set

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3075 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   |  3 +++
 src/winio.c | 21 ++++++++++++++-------
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4eef071d..5a1b76df 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -43,6 +43,9 @@ CVS code -
   edit_add()
 	- Rename to edit_draw(), and rename parameter yval to line.
 	  (DLR)
+  do_yesno()
+	- Make mouse clicks on the Yes/No/All shortcuts work properly
+	  when the MORE_SPACE flag is set. (DLR)
 - doc/nanorc.sample:
 	- Tweak the "c-file" regex for characters to properly accept
 	  '\"' and reject '"' and '''. (DLR)
diff --git a/src/winio.c b/src/winio.c
index 84fb8d3f..e4ca5eb9 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2933,17 +2933,24 @@ int do_yesno(bool all, const char *msg)
 
 	    if (mouse_x != -1 && mouse_y != -1 && !ISSET(NO_HELP) &&
 		wenclose(bottomwin, mouse_y, mouse_x) &&
-		mouse_x < (width * 2) && mouse_y >= editwinrows + 3) {
+		mouse_x < (width * 2) && mouse_y - (2 -
+		no_more_space()) - editwinrows - 1 >= 0) {
 		int x = mouse_x / width;
-		    /* Did we click in the first column of shortcuts, or
-		     * the second? */
-		int y = mouse_y - editwinrows - 3;
-		    /* Did we click in the first row of shortcuts? */
+			/* Calculate the x-coordinate relative to the
+			 * two columns of the Yes/No/All shortcuts in
+			 * bottomwin. */
+		int y = mouse_y - (2 - no_more_space()) -
+			editwinrows - 1;
+			/* Calculate the y-coordinate relative to the
+			 * beginning of the Yes/No/All shortcuts in
+			 * bottomwin, i.e, with the sizes of topwin,
+			 * edit, and the first line of bottomwin
+			 * subtracted out. */
 
 		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 they clicked Yes or No.  y == 0 means
+		 * Yes or All. */
 		ok = -2 * x * y + x - y + 1;
 
 		if (ok == 2 && !all)
-- 
GitLab