mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.1.1751: when redrawing popups plines_win() may be called often
Problem: When redrawing popups plines_win() may be called often. Solution: Pass a cache to mouse_comp_pos().
This commit is contained in:
		| @@ -2593,6 +2593,10 @@ may_update_popup_mask(int type) | ||||
|     // Only check which lines are to be updated if not already | ||||
|     // updating all lines. | ||||
|     if (mask == popup_mask_next) | ||||
|     { | ||||
| 	int	    *plines_cache = ALLOC_CLEAR_MULT(int, Rows); | ||||
| 	win_T	    *prev_wp = NULL; | ||||
|  | ||||
| 	for (line = 0; line < screen_Rows; ++line) | ||||
| 	{ | ||||
| 	    int	    col_done = 0; | ||||
| @@ -2625,13 +2629,19 @@ may_update_popup_mask(int type) | ||||
| 			wp = mouse_find_win(&line_cp, &col_cp, IGNORE_POPUP); | ||||
| 			if (wp != NULL) | ||||
| 			{ | ||||
| 			    if (wp != prev_wp) | ||||
| 			    { | ||||
| 				vim_memset(plines_cache, 0, sizeof(int) * Rows); | ||||
| 				prev_wp = wp; | ||||
| 			    } | ||||
|  | ||||
| 			    if (line_cp >= wp->w_height) | ||||
| 				// In (or below) status line | ||||
| 				wp->w_redr_status = TRUE; | ||||
| 			    // compute the position in the buffer line from the | ||||
| 			    // position on the screen | ||||
| 			    else if (mouse_comp_pos(wp, &line_cp, &col_cp, | ||||
| 									&lnum)) | ||||
| 							  &lnum, plines_cache)) | ||||
| 				// past bottom | ||||
| 				wp->w_redr_status = TRUE; | ||||
| 			    else | ||||
| @@ -2645,6 +2655,9 @@ may_update_popup_mask(int type) | ||||
| 		} | ||||
| 	    } | ||||
| 	} | ||||
|  | ||||
| 	vim_free(plines_cache); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* | ||||
|   | ||||
		Reference in New Issue
	
	Block a user