patch 9.1.1394: tabpanel not correctly redrawn on tabonly

Problem:  tabpanel not correctly redrawn on tabonly
          (Maxim Kim, after v9.1.1391)
Solution: force redraw of the tabpanel, tweak style
          (Hirohito Higashi)

fixes: #17322
closes: #17330

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/tabpanel.c b/src/tabpanel.c
index f4bed4b..0472e6b 100644
--- a/src/tabpanel.c
+++ b/src/tabpanel.c
@@ -16,7 +16,7 @@
 #if defined(FEAT_TABPANEL) || defined(PROTO)
 
 static void do_by_tplmode(int tplmode, int col_start, int col_end,
-	int* pcurtab_row, int* ptabpagenr);
+	int *pcurtab_row, int *ptabpagenr);
 
 // set pcurtab_row. don't redraw tabpanel.
 #define TPLMODE_GET_CURTAB_ROW	0
@@ -29,10 +29,6 @@
 
 #define VERT_LEN		1
 
-// tpl_vert's values
-#define VERT_OFF		0
-#define VERT_ON			1
-
 // tpl_align's values
 #define ALIGN_LEFT		0
 #define ALIGN_RIGHT		1
@@ -41,7 +37,7 @@
 static int opt_scope = OPT_LOCAL;
 static int tpl_align = ALIGN_LEFT;
 static int tpl_columns = 20;
-static int tpl_vert = VERT_OFF;
+static int tpl_is_vert = FALSE;
 
 typedef struct {
     win_T   *wp;
@@ -62,7 +58,7 @@
     char_u	*p;
     int		new_align = ALIGN_LEFT;
     int		new_columns = 20;
-    int		new_vert = VERT_OFF;
+    int		new_is_vert = FALSE;
 
     p = p_tplo;
     while (*p != NUL)
@@ -85,7 +81,7 @@
 	else if (STRNCMP(p, "vert", 4) == 0)
 	{
 	    p += 4;
-	    new_vert = VERT_ON;
+	    new_is_vert = TRUE;
 	}
 
 	if (*p != ',' && *p != NUL)
@@ -96,7 +92,7 @@
 
     tpl_align = new_align;
     tpl_columns = new_columns;
-    tpl_vert = new_vert;
+    tpl_is_vert = new_is_vert;
 
     return OK;
 }
@@ -130,9 +126,7 @@
     int
 tabpanel_leftcol(win_T *wp)
 {
-    if (cmdline_pum_active())
-	return 0;
-    else if (wp != NULL && WIN_IS_POPUP(wp))
+    if (cmdline_pum_active() || (wp != NULL && WIN_IS_POPUP(wp)))
 	return 0;
     else
 	return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width();
@@ -156,7 +150,7 @@
 int		vsrow = 0;
     int		is_right = tpl_align == ALIGN_RIGHT;
 
-    if (0 == maxwidth)
+    if (maxwidth == 0)
 	return;
 
 #ifndef MSWIN
@@ -168,8 +162,7 @@
 	else
 	    off = LineOffset[row];
 
-	vim_memset(ScreenLines + off, ' ',
-		(size_t)maxwidth * sizeof(schar_T));
+	vim_memset(ScreenLines + off, ' ', (size_t)maxwidth * sizeof(schar_T));
 	if (enc_utf8)
 	    vim_memset(ScreenLinesUC + off, -1,
 		(size_t)maxwidth * sizeof(u8char_T));
@@ -179,7 +172,7 @@
     // Reset got_int to avoid build_stl_str_hl() isn't evaluted.
     got_int = FALSE;
 
-    if (tpl_vert == VERT_ON)
+    if (tpl_is_vert)
     {
 	if (is_right)
 	{
@@ -237,7 +230,7 @@
     int		curtab_row = 0;
     int		tabpagenr = 0;
 
-    if (0 == maxwidth)
+    if (maxwidth == 0)
 	return -1;
 
     do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth, &curtab_row, NULL);
@@ -260,7 +253,7 @@
 	int	attr)
 {
     int is_right = tpl_align == ALIGN_RIGHT;
-    if (TPLMODE_REDRAW == tplmode)
+    if (tplmode == TPLMODE_REDRAW)
 	screen_fill(row_start, row_end,
 		(is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_start,
 		(is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_end,
@@ -282,19 +275,19 @@
     int		chlen;
     int		chcells;
     char_u	buf[IOSIZE];
-    char_u*	temp;
+    char_u	*temp;
 
     for (j = 0; j < len;)
     {
-	if ((TPLMODE_GET_CURTAB_ROW != tplmode)
-		&& (pargs->maxrow <= (*pargs->prow - pargs->offsetrow)))
+	if (tplmode != TPLMODE_GET_CURTAB_ROW
+		&& pargs->maxrow <= *pargs->prow - pargs->offsetrow)
 	    break;
 
-	if ((p[j] == '\n') || (p[j] == '\r'))
+	if (p[j] == '\n' || p[j] == '\r')
 	{
 	    // fill the tailing area of current row.
-	    if (0 <= (*pargs->prow - pargs->offsetrow)
-		    && (*pargs->prow - pargs->offsetrow) < pargs->maxrow)
+	    if (*pargs->prow - pargs->offsetrow >= 0
+		    && *pargs->prow - pargs->offsetrow < pargs->maxrow)
 		screen_fill_tailing_area(tplmode,
 			*pargs->prow - pargs->offsetrow,
 			*pargs->prow - pargs->offsetrow + 1,
@@ -331,8 +324,8 @@
 	    if (pargs->col_end < (*pargs->pcol) + chcells)
 	    {
 		// fill the tailing area of current row.
-		if (0 <= (*pargs->prow - pargs->offsetrow)
-			&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow)
+		if (*pargs->prow - pargs->offsetrow >= 0
+			&& *pargs->prow - pargs->offsetrow < pargs->maxrow)
 		    screen_fill_tailing_area(tplmode,
 			    *pargs->prow - pargs->offsetrow,
 			    *pargs->prow - pargs->offsetrow + 1,
@@ -343,17 +336,17 @@
 		    break;
 	    }
 
-	    if ((*pargs->pcol) + chcells <= pargs->col_end)
+	    if (*pargs->pcol + chcells <= pargs->col_end)
 	    {
 		int off = (tpl_align == ALIGN_RIGHT)
 			? COLUMNS_WITHOUT_TPL()
 			: 0;
-		if ((TPLMODE_REDRAW == tplmode)
-			&& (0 <= (*pargs->prow - pargs->offsetrow)
-			&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow))
+		if (TPLMODE_REDRAW == tplmode
+			&& (*pargs->prow - pargs->offsetrow >= 0
+			&& *pargs->prow - pargs->offsetrow < pargs->maxrow))
 		    screen_puts(buf, *pargs->prow - pargs->offsetrow,
 			    *pargs->pcol + off, attr);
-		(*pargs->pcol) += chcells;
+		*pargs->pcol += chcells;
 	    }
 	}
     }
@@ -376,9 +369,9 @@
 	if (bufIsChanged(pargs->wp->w_buffer))
 	    modified = TRUE;
 
-    if (modified || 1 < wincount)
+    if (modified || wincount > 1)
     {
-	if (1 < wincount)
+	if (wincount > 1)
 	{
 	    vim_snprintf((char *)NameBuff, MAXPATHL, "%d", wincount);
 	    len = (int)STRLEN(NameBuff);
@@ -406,8 +399,8 @@
     screen_puts_len_for_tabpanel(tplmode, NameBuff, len, pargs->attr, pargs);
 
     // fill the tailing area of current row.
-    if (0 <= (*pargs->prow - pargs->offsetrow)
-	    && (*pargs->prow - pargs->offsetrow) < pargs->maxrow)
+    if (*pargs->prow - pargs->offsetrow >= 0
+	    && *pargs->prow - pargs->offsetrow < pargs->maxrow)
 	screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow,
 		*pargs->prow - pargs->offsetrow + 1,
 		*pargs->pcol, pargs->col_end, pargs->attr);
@@ -473,8 +466,8 @@
     screen_puts_len_for_tabpanel(tplmode, p, (int)STRLEN(p), curattr, pargs);
 
     // fill the tailing area of current row.
-    if (0 <= (*pargs->prow - pargs->offsetrow)
-	    && (*pargs->prow - pargs->offsetrow) < pargs->maxrow)
+    if (*pargs->prow - pargs->offsetrow >= 0
+	    && *pargs->prow - pargs->offsetrow < pargs->maxrow)
 	screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow,
 		*pargs->prow - pargs->offsetrow + 1, *pargs->pcol,
 		pargs->col_end, curattr);
@@ -501,7 +494,7 @@
 
     // When the format starts with "%!" then evaluate it as an expression and
     // use the result as the actual format string.
-    if (1 < len && usefmt[0] == '%' && usefmt[1] == '!')
+    if (len > 1 && usefmt[0] == '%' && usefmt[1] == '!')
     {
 	typval_T	tv;
 	char_u		*p = NULL;
@@ -539,24 +532,23 @@
     int		row = 0;
     tabpage_T	*tp = NULL;
     typval_T	v;
-    tabpanel_T    args;
+    tabpanel_T	args;
 
     args.maxrow = cmdline_row;
     args.offsetrow = 0;
     args.col_start = col_start;
     args.col_end = col_end;
 
-    if (TPLMODE_GET_CURTAB_ROW != tplmode)
-	if (0 < args.maxrow)
-	    while (args.offsetrow + args.maxrow <= *pcurtab_row)
-		args.offsetrow += args.maxrow;
+    if (tplmode != TPLMODE_GET_CURTAB_ROW && args.maxrow > 0)
+	while (args.offsetrow + args.maxrow <= *pcurtab_row)
+	    args.offsetrow += args.maxrow;
 
     tp = first_tabpage;
 
     for (row = 0; tp != NULL; row++)
     {
-	if ((TPLMODE_GET_CURTAB_ROW != tplmode)
-		&& (args.maxrow <= (row - args.offsetrow)))
+	if (tplmode != TPLMODE_GET_CURTAB_ROW
+		&& args.maxrow <= row - args.offsetrow)
 	    break;
 
 	col = col_start;
@@ -568,7 +560,7 @@
 	if (tp->tp_topframe == topframe)
 	{
 	    args.attr = attr_tpls;
-	    if (TPLMODE_GET_CURTAB_ROW == tplmode)
+	    if (tplmode == TPLMODE_GET_CURTAB_ROW)
 	    {
 		*pcurtab_row = row;
 		break;
@@ -588,20 +580,20 @@
 	    args.wp = tp->tp_firstwin;
 	}
 
-	char_u*	usefmt = starts_with_percent_and_bang(&args);
+	char_u *usefmt = starts_with_percent_and_bang(&args);
 	if (usefmt != NULL)
 	{
 	    char_u	buf[IOSIZE];
 	    char_u	*p = usefmt;
 	    size_t	i = 0;
 
-	    while (p[i] != '\0')
+	    while (p[i] != NUL)
 	    {
-		while ((p[i] == '\n') || (p[i] == '\r'))
+		while (p[i] == '\n' || p[i] == '\r')
 		{
 		    // fill the tailing area of current row.
-		    if (0 <= (row - args.offsetrow)
-			    && (row - args.offsetrow) < args.maxrow)
+		    if (row - args.offsetrow >= 0
+			    && row - args.offsetrow < args.maxrow)
 			screen_fill_tailing_area(tplmode,
 				row - args.offsetrow,
 				row - args.offsetrow + 1,
@@ -611,15 +603,14 @@
 		    p++;
 		}
 
-		while ((p[i] != '\n') && (p[i] != '\r')
-			&& (p[i] != '\0'))
+		while (p[i] != '\n' && p[i] != '\r' && (p[i] != NUL))
 		{
 		    if (i + 1 >= sizeof(buf))
 			break;
 		    buf[i] = p[i];
 		    i++;
 		}
-		buf[i] = '\0';
+		buf[i] = NUL;
 
 		args.user_defined = buf;
 		args.prow = &row;
@@ -644,7 +635,7 @@
 
 	tp = tp->tp_next;
 
-	if ((TPLMODE_GET_TABPAGENR == tplmode)
+	if ((tplmode == TPLMODE_GET_TABPAGENR)
 		&& (mouse_row <= (row - args.offsetrow)))
 	{
 	    *ptabpagenr = v.vval.v_number;