gui: Fix window redrawing on SIGWINCH.
authorAndre Noll <maan@systemlinux.org>
Sat, 5 Mar 2011 11:42:04 +0000 (12:42 +0100)
committerAndre Noll <maan@systemlinux.org>
Sat, 5 Mar 2011 11:42:04 +0000 (12:42 +0100)
It is incorrect to check the condition (offset < 0 || len < offset).
This caused messed up contents of the bottom window after a resize.

gui.c

diff --git a/gui.c b/gui.c
index eba1e2a..38addd9 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -400,11 +400,13 @@ static int draw_top_rbe(unsigned *lines)
        rbe = ringbuffer_get(bot_win_rb, fvr);
        if (!rbe)
                return -1;
-       /* first rbe might be only partially visible */
-       offset = (*lines - bot.lines) * bot.cols;
        len = strlen(rbe->msg);
-       if (offset < 0 || len < offset)
-               return -1;
+       if (*lines > bot.lines) {
+               /* first rbe is only partially visible */
+               offset = (*lines - bot.lines) * bot.cols;
+               assert(offset <= len);
+       } else
+               offset = 0;
        wattron(bot.win, COLOR_PAIR(rbe->color));
        waddstr(bot.win, rbe->msg + offset);
        *lines = NUM_LINES(len - offset);