]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.759 v7.3.759
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Dec 2012 16:12:25 +0000 (17:12 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Dec 2012 16:12:25 +0000 (17:12 +0100)
Problem:    MS-Windows: Updating the tabline is slow when there are many tabs.
Solution:   Disable redrawing while performing the update. (Arseny Kapoulkine)

src/gui_w48.c
src/version.c

index 61c53a7d6fbb1696a0f296b20cca45f2777c81bd..a70fb259ea5d1dc436faaa789cd35bf2faba05d7 100644 (file)
@@ -2452,7 +2452,6 @@ gui_mch_update_tabline(void)
     TCITEM     tie;
     int                nr = 0;
     int                curtabidx = 0;
-    RECT       rc;
 #ifdef FEAT_MBYTE
     static int use_unicode = FALSE;
     int                uu;
@@ -2479,13 +2478,16 @@ gui_mch_update_tabline(void)
     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-";
@@ -2519,11 +2521,14 @@ gui_mch_update_tabline(void)
     }
 
     /* 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);
 }
 
 /*
index 5a0f8159bccc1dad7d6dedcb1cd70738cfa3f505..e743fae5089c0fd574f91ac72135b6d600b9e1a6 100644 (file)
@@ -725,6 +725,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    759,
 /**/
     758,
 /**/