]> git.wh0rd.org Git - nano.git/commitdiff
adjust the shortcut list display and related mouse support to not waste
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 18 Apr 2006 16:13:35 +0000 (16:13 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 18 Apr 2006 16:13:35 +0000 (16:13 +0000)
the last few characters of bottomwin when the screen width isn't a clean
multiple of the column width, per Benno Schulenberg's patch (with a few
tweaks by me)

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3390 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/winio.c

index 1f0f002b9ef54c2cb6c514139b0bd77d0e0f7aa2..ca66f481a285237c537dca377a680a6732dda315 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -39,6 +39,11 @@ CVS code -
          display" refer to display, for clarity.  Changes to
          shortcut_init(), configure.ac, and faq.html. (DLR, suggested
          by Benno Schulenberg)
+       - Adjust the shortcut list display and related mouse support to
+         not waste the last few characters of bottomwin when the screen
+         width isn't a clean multiple of the column width.  Changes to
+         do_mouseinput() and bottombars(). (Benno Schulenberg, minor
+         tweaks by DLR)
 - files.c:
   open_file()
        - Remove redundant wording in the error message when we try to
index 99b7e129fde25c883fe6c6f5c5b9c6e63b5f6aaf..54c1ccae1c3d7bb6fdc1fd35b9b42cc7a1d8a176 100644 (file)
@@ -1587,25 +1587,34 @@ bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
                currslen = MAIN_VISIBLE;
        }
 
-       /* Calculate the width of each shortcut in the list.  It's the
-        * same for all of them. */
+       /* Calculate the width of all of the shortcuts in the list
+        * except for the last two, which are longer by (COLS % i)
+        * columns so as to not waste space. */
        if (currslen < 2)
-           i = COLS / 6;
+           i = COLS / (MAIN_VISIBLE / 2);
        else
            i = COLS / ((currslen / 2) + (currslen % 2));
 
        /* Calculate the y-coordinate relative to the beginning of
         * the shortcut list in bottomwin, i.e, with the sizes of
         * topwin, edit, and the first line of bottomwin subtracted
-        * out. */
+        * out, and set j to it. */
        j = *mouse_y - (2 - no_more_space()) - editwinrows - 1;
 
-       /* If we're on the statusbar, beyond the end of the shortcut
-        * list, or beyond the end of a shortcut on the right side of
-        * the screen, don't do anything. */
-       if (j < 0 || (*mouse_x / i) >= currslen)
+       /* If we're on the statusbar, don't do anything. */
+       if (j < 0)
            return FALSE;
+
+       /* Calculate the x-coordinate relative to the beginning of the
+        * shortcut list in bottomwin, and add it to j.  j should now be
+        * the index in the shortcut list of the shortcut we clicked. */
        j = (*mouse_x / i) * 2 + j;
+
+       /* Adjust j if we clicked in the last two shortcuts. */
+       if ((j >= currslen) && (*mouse_x % i < COLS % i))
+           j -= 2;
+
+       /* If we're beyond the last shortcut, don't do anything. */
        if (j >= currslen)
            return FALSE;
 
@@ -2222,8 +2231,10 @@ void bottombars(const shortcut *s)
            slen = MAIN_VISIBLE;
     }
 
-    /* There will be this many characters per column.  We need at least
-     * 3 to display anything properly. */
+    /* There will be this many characters per column, except for the
+     * last two, which will be longer by (COLS % colwidth) columns so as
+     * to not waste space.  We need at least three columns to display
+     * anything properly. */
     colwidth = COLS / ((slen / 2) + (slen % 2));
 
     blank_bottombars();
@@ -2247,7 +2258,7 @@ void bottombars(const shortcut *s)
        keystr = foo;
 
        wmove(bottomwin, 1 + i % 2, (i / 2) * colwidth);
-       onekey(keystr, s->desc, colwidth);
+       onekey(keystr, s->desc, colwidth + (COLS % colwidth));
     }
 
     wnoutrefresh(bottomwin);