1. ZyX_I
  2. vim

Commits

Bram Moolenaar  committed 25ea15f

updated for version 7.3.759
Problem: MS-Windows: Updating the tabline is slow when there are many tabs.
Solution: Disable redrawing while performing the update. (Arseny Kapoulkine)

  • Participants
  • Parent commits 1f37275
  • Branches default
  • Tags v7.3.759

Comments (0)

Files changed (2)

File src/gui_w48.c

View file
     TCITEM	tie;
     int		nr = 0;
     int		curtabidx = 0;
-    RECT	rc;
 #ifdef FEAT_MBYTE
     static int	use_unicode = FALSE;
     int		uu;
     tie.mask = TCIF_TEXT;
     tie.iImage = -1;
 
+    /* Disable redraw for tab updates to eliminate O(N^2) draws. */
+    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)FALSE, 0);
+
     /* Add a label for each tab page.  They all contain the same text area. */
     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr)
     {
 	if (tp == curtab)
 	    curtabidx = nr;
 
-	if (!TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+	if (nr >= TabCtrl_GetItemCount(s_tabhwnd))
 	{
 	    /* Add the tab */
 	    tie.pszText = "-Empty-";
     }
 
     /* Remove any old labels. */
-    while (TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+    while (nr < TabCtrl_GetItemCount(s_tabhwnd))
 	TabCtrl_DeleteItem(s_tabhwnd, nr);
 
     if (TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
 	TabCtrl_SetCurSel(s_tabhwnd, curtabidx);
+
+    /* Re-enable redraw. This should trigger a repaint. */
+    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)TRUE, 0);
 }
 
 /*

File src/version.c

View file
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    759,
+/**/
     758,
 /**/
     757,