]> git.wh0rd.org Git - nano.git/commitdiff
Fix regular scrolling with softwrap enabled too. Stop trying to be clever and just
authorChris Allegretta <chrisa@asty.org>
Thu, 3 Sep 2009 02:48:35 +0000 (02:48 +0000)
committerChris Allegretta <chrisa@asty.org>
Thu, 3 Sep 2009 02:48:35 +0000 (02:48 +0000)
figure out if we need to bail and call edit_refresh().

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

ChangeLog
src/winio.c

index 70158adf0686d607997685d235f2855eb5445ff6..16107fe66596d6d8ef0f347306c64bba97658403 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,5 @@
 2009-08-29 Chris Allegretta <chrisa@asty.org>
-       * Fix more soft wrapping issues, particularly with soft scrolling,
+       * Fix more soft wrapping issues, particularly with scrolling,
          discovered by Hannes <mr_creosote@mutantwatch.de>.
 
 2009-08-19 Chris Allegretta <chrisa@asty.org>
index 3835601a6c0f0704c17ee169f9766091947cfe55..8c60c06254c1688a6009d0f8227e0c339891d961 100644 (file)
@@ -2939,26 +2939,32 @@ void edit_scroll(scroll_dir direction, ssize_t nlines)
     if (nlines < 1)
        return;
 
-    if (need_vertical_update(0) || ISSET(SOFTWRAP) && strlen(openfile->edittop->data) / (COLS - 1) > 1)
+    if (need_vertical_update(0))
        do_redraw = TRUE;
 
 
     /* If using soft wrapping, we want to scroll down enough to display the entire next
         line, if possible... */
-    if (ISSET(SOFTWRAP)) {
+    if (ISSET(SOFTWRAP) && direction == DOWN_DIR) {
 #ifdef DEBUG
           fprintf(stderr, "Softwrap: Entering check for extracuzsoft\n");
 #endif
-       for (i = editwinrows, foo = openfile->edittop; foo && i > 0; i--, foo = foo->next)
-           i -= strlenpt(foo->data) / (COLS - 1);
+       for (i = editwinrows, foo = openfile->edittop; foo && i > 0; i--, foo = foo->next) {
+           ssize_t len = strlenpt(foo->data) / (COLS - 1);
+           if (len > 0)
+               do_redraw = TRUE;
+           i -= len;
+       }
        if (foo) {
           extracuzsoft += strlenpt(foo->data) / (COLS - 1);
 #ifdef DEBUG
           fprintf(stderr, "Setting extracuzsoft to %zd due to strlen %zd of line %zd\n", extracuzsoft,
                strlenpt(foo->data), foo->lineno);
 #endif
+
+
            /* Now account for whether the edittop line itself is >COLS, if scrolling down */
-          for (foo = openfile->edittop; direction != UP_DIR && foo && extracuzsoft > 0; nlines++) {
+          for (foo = openfile->edittop; foo && extracuzsoft > 0; nlines++) {
                extracuzsoft -= strlenpt(foo->data) / (COLS - 1) + 1;
 #ifdef DEBUG
                fprintf(stderr, "Edittop adjustment, setting nlines to %zd\n", nlines);
@@ -2968,9 +2974,15 @@ void edit_scroll(scroll_dir direction, ssize_t nlines)
                foo = foo->next;
            }
        }
+    } else if (ISSET(SOFTWRAP) && direction == UP_DIR) {
+       for (foo = openfile->edittop, i = editwinrows; foo && i > 0; i--, foo = foo->prev) {
+           if (strlenpt(foo->data) / (COLS - 1) > 0) {
+               do_redraw = TRUE;
+               break;
+           }
+       }
     }
 
-
     /* Part 1: nlines is the number of lines we're going to scroll the
      * text of the edit window. */