diff --git a/7.3.759 b/7.3.759 new file mode 100644 index 0000000..0273926 --- /dev/null +++ b/7.3.759 @@ -0,0 +1,106 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.759 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 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) +Files: src/gui_w48.c + + +*** ../vim-7.3.758/src/gui_w48.c 2012-11-20 16:53:34.000000000 +0100 +--- src/gui_w48.c 2012-12-12 17:10:21.000000000 +0100 +*************** +*** 2452,2458 **** + TCITEM tie; + int nr = 0; + int curtabidx = 0; +- RECT rc; + #ifdef FEAT_MBYTE + static int use_unicode = FALSE; + int uu; +--- 2452,2457 ---- +*************** +*** 2479,2491 **** + tie.mask = TCIF_TEXT; + tie.iImage = -1; + + /* 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)) + { + /* Add the tab */ + tie.pszText = "-Empty-"; +--- 2478,2493 ---- + 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 (nr >= TabCtrl_GetItemCount(s_tabhwnd)) + { + /* Add the tab */ + tie.pszText = "-Empty-"; +*************** +*** 2519,2529 **** + } + + /* Remove any old labels. */ +! while (TabCtrl_GetItemRect(s_tabhwnd, nr, &rc)) + TabCtrl_DeleteItem(s_tabhwnd, nr); + + if (TabCtrl_GetCurSel(s_tabhwnd) != curtabidx) + TabCtrl_SetCurSel(s_tabhwnd, curtabidx); + } + + /* +--- 2521,2534 ---- + } + + /* Remove any old labels. */ +! 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); + } + + /* +*** ../vim-7.3.758/src/version.c 2012-12-12 16:43:52.000000000 +0100 +--- src/version.c 2012-12-12 17:10:46.000000000 +0100 +*************** +*** 727,728 **** +--- 727,730 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 759, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +148. You find it easier to dial-up the National Weather Service + Weather/your_town/now.html than to simply look out the window. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///