patch 9.1.1391: Vim does not have a vertical tabpanel

Problem:  Vim does not have a tabpanel
Solution: include the tabpanel feature
          (Naruhiko Nishino, thinca)

closes: #17263

Co-authored-by: thinca <thinca@gmail.com>
Signed-off-by: Naruhiko Nishino <naru123456789@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/drawscreen.c b/src/drawscreen.c
index 4736bf1..1e71cae 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -209,6 +209,9 @@
 		    redraw_cmdline = TRUE;
 		redraw_tabline = TRUE;
 	    }
+#if defined(FEAT_TABPANEL)
+	    redraw_tabpanel = TRUE;
+#endif
 	}
 	msg_scrolled = 0;
 	need_wait_return = FALSE;
@@ -265,6 +268,11 @@
     if (redraw_tabline || type >= UPD_NOT_VALID)
 	draw_tabline();
 
+#if defined(FEAT_TABPANEL)
+    if (redraw_tabpanel || type >= UPD_NOT_VALID)
+	draw_tabpanel();
+#endif
+
 #ifdef FEAT_SYN_HL
     // Correct stored syntax highlighting info for changes in each displayed
     // buffer.  Each buffer must only be done once.
@@ -331,6 +339,10 @@
 	    win_redr_status(wp, TRUE); // any popup menu will be redrawn below
 	}
     }
+#if defined(FEAT_TABPANEL)
+    if (redraw_tabpanel)
+	draw_tabpanel();
+#endif
 #if defined(FEAT_SEARCH_EXTRA)
     end_search_hl();
 #endif
@@ -529,14 +541,13 @@
 	    plen = this_ru_col - 1;
 	}
 
-	screen_puts(p, row, wp->w_wincol, attr);
-	screen_fill(row, row + 1, plen + wp->w_wincol,
-			this_ru_col + wp->w_wincol, fillchar, fillchar, attr);
-
+	screen_puts(p, row, wp->w_wincol + TPL_LCOL(wp), attr);
+	screen_fill(row, row + 1, plen + wp->w_wincol + TPL_LCOL(wp),
+			this_ru_col + wp->w_wincol + TPL_LCOL(wp), fillchar, fillchar, attr);
 	if ((NameBufflen = get_keymap_str(wp, (char_u *)"<%s>", NameBuff, MAXPATHL)) > 0
 		&& (this_ru_col - plen) > (NameBufflen + 1))
 	    screen_puts(NameBuff, row, (int)(this_ru_col - NameBufflen
-						   - 1 + wp->w_wincol), attr);
+						   - 1 + wp->w_wincol + TPL_LCOL(wp)), attr);
 
 	win_redr_ruler(wp, TRUE, ignore_pum);
 
@@ -561,7 +572,8 @@
 	    fillchar = fillchar_status(&attr, wp);
 	else
 	    fillchar = fillchar_vsep(&attr, wp);
-	screen_putchar(fillchar, row, W_ENDCOL(wp), attr);
+	if (W_ENDCOL(wp) < COLUMNS_WITHOUT_TPL())
+	    screen_putchar(fillchar, row, W_ENDCOL(wp) + TPL_LCOL(wp), attr);
     }
     busy = FALSE;
 }
@@ -620,6 +632,11 @@
     // Redraw the tab pages line if needed.
     if (redraw_tabline)
 	draw_tabline();
+
+#if defined(FEAT_TABPANEL)
+    if (redraw_tabpanel)
+	draw_tabpanel();
+#endif
 }
 
     void
@@ -781,11 +798,11 @@
 	    buffer[bufferlen] = NUL;
 	}
 
-	screen_puts(buffer, row, this_ru_col + off, attr);
+	screen_puts(buffer, row, this_ru_col + off + TPL_LCOL(wp), attr);
 	n1 = redraw_cmdline;
 	screen_fill(row, row + 1,
-		this_ru_col + off + bufferlen,
-		(off + width),
+		this_ru_col + off + bufferlen + TPL_LCOL(wp),
+		(off + width) + TPL_LCOL(wp),
 		fillchar, fillchar, attr);
 	// don't redraw the cmdline because of showing the ruler
 	redraw_cmdline = n1;
@@ -1026,8 +1043,8 @@
     }
     wp->w_winbar_items[item_idx].wb_menu = NULL; // end marker
 
-    screen_line(wp, wp->w_winrow, wp->w_wincol, wp->w_width, wp->w_width, -1,
-									    0);
+    screen_line(wp, wp->w_winrow, wp->w_wincol + TPL_LCOL(wp), wp->w_width,
+							  wp->w_width, -1, 0);
 }
 #endif
 
@@ -1361,8 +1378,8 @@
     }
 #endif
 
-    screen_line(wp, row + W_WINROW(wp), wp->w_wincol,
-					      wp->w_width, wp->w_width, -1, 0);
+    screen_line(wp, row + W_WINROW(wp), wp->w_wincol + TPL_LCOL(wp),
+						wp->w_width, wp->w_width, -1, 0);
 
     // Update w_cline_height and w_cline_folded if the cursor line was
     // updated (saves a call to plines() later).
@@ -2672,8 +2689,8 @@
 	    // Last line isn't finished: Display "@@@" at the end.
 	    screen_fill(W_WINROW(wp) + wp->w_height - 1,
 		    W_WINROW(wp) + wp->w_height,
-		    start_col < wp->w_wincol ? wp->w_wincol : start_col,
-		    (int)W_ENDCOL(wp),
+		    (start_col < wp->w_wincol ? wp->w_wincol : start_col) + TPL_LCOL(wp),
+		    (int)W_ENDCOL(wp) + TPL_LCOL(wp),
 		    symbol, symbol, HL_ATTR(HLF_AT));
 	    set_empty_rows(wp, srow);
 	    wp->w_botline = lnum;
@@ -2898,6 +2915,11 @@
 	    win_redr_status(wp, FALSE);
     }
 
+#if defined(FEAT_TABPANEL)
+    if (redraw_tabpanel)
+	draw_tabpanel();
+#endif
+
     update_finish();
 }
 #endif
@@ -2930,6 +2952,11 @@
     if (redraw_tabline)
 	draw_tabline();
 
+#if defined(FEAT_TABPANEL)
+    if (redraw_tabpanel)
+	draw_tabpanel();
+#endif
+
     if (wp->w_redr_status || p_ru
 # ifdef FEAT_STL_OPT
 	    || *p_stl != NUL || *wp->w_p_stl != NUL
@@ -3328,6 +3355,11 @@
 	    win_redr_status(wp, FALSE);
     if (redraw_tabline)
 	draw_tabline();
+
+#if defined(FEAT_TABPANEL)
+    if (redraw_tabpanel)
+	draw_tabpanel();
+#endif
 }
 
 /*