mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 9.1.1230: inconsistent CTRL-C behaviour for popup windows
Problem:  Ctrl-C closes popup windows that have a filter callback,
          but does not close popups without a filter callback.
Solution: Modified popup_do_filter() to also close popups without
          filter callback when Ctrl-C is pressed (glepnir).
fixes: #16839
closes: #16928
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
			
			
This commit is contained in:
		
				
					committed by
					
						 Christian Brabandt
						Christian Brabandt
					
				
			
			
				
	
			
			
			
						parent
						
							9712a2534f
						
					
				
				
					commit
					8a63529a2f
				
			| @@ -1,4 +1,4 @@ | ||||
| *pattern.txt*   For Vim version 9.1.  Last change: 2024 Dec 26 | ||||
| *pattern.txt*   For Vim version 9.1.  Last change: 2025 Mar 21 | ||||
|  | ||||
|  | ||||
| 		  VIM REFERENCE MANUAL    by Bram Moolenaar | ||||
| @@ -141,6 +141,7 @@ CTRL-C			Interrupt current (search) command.  Use CTRL-Break on | ||||
| 			help users who use "vim file | grep word" and don't | ||||
| 			know how to get out (blindly typing :qa<CR> would | ||||
| 			work). | ||||
| 			If a popup is open, the active popup will be closed. | ||||
|  | ||||
| 							*:noh* *:nohlsearch* | ||||
| :noh[lsearch]		Stop the highlighting for the 'hlsearch' option.  It | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| *version9.txt*  For Vim version 9.1.  Last change: 2025 Mar 19 | ||||
| *version9.txt*  For Vim version 9.1.  Last change: 2025 Mar 21 | ||||
| 
 | ||||
| 
 | ||||
| 		  VIM REFERENCE MANUAL    by Bram Moolenaar | ||||
| @@ -41653,6 +41653,7 @@ Others: ~ | ||||
| - add |dist#vim9#Launch()| and |dist#vim9#Open()| to the |vim-script-library| | ||||
|   and decouple it from |netrw| | ||||
| - new digraph "APPROACHES THE LIMIT" using ".=" | ||||
| - |CTRL-C| always closes the active |popup-window|. | ||||
| 
 | ||||
| 							*added-9.2* | ||||
| Added ~ | ||||
|   | ||||
| @@ -3586,6 +3586,20 @@ popup_do_filter(int c) | ||||
| 		&& (wp->w_filter_mode & state) != 0) | ||||
| 	    res = invoke_popup_filter(wp, c); | ||||
|  | ||||
|     // when Ctrl-C and no popup has been processed (res is still FALSE) | ||||
|     // Try to find and close a popup that has no filter callback | ||||
|     if (c == Ctrl_C && res == FALSE) | ||||
|     { | ||||
| 	popup_reset_handled(POPUP_HANDLED_2); | ||||
| 	wp = find_next_popup(FALSE, POPUP_HANDLED_2); | ||||
|         if (wp != NULL) | ||||
|         { | ||||
| 	    popup_close_with_retval(wp, -1); | ||||
| 	    res = TRUE; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|  | ||||
|     if (must_redraw > was_must_redraw) | ||||
|     { | ||||
| 	int save_got_int = got_int; | ||||
|   | ||||
| @@ -3898,6 +3898,24 @@ func Test_popupwin_cancel() | ||||
|   call assert_equal({}, popup_getpos(win3)) | ||||
| endfunc | ||||
|  | ||||
| func Test_popupwin_cancel_with_without_filter() | ||||
|   let win1 = popup_create('with filter', #{line: 5, filter: {... -> 0}}) | ||||
|   let win2 = popup_create('no filter', #{line: 10}) | ||||
|  | ||||
|   call assert_equal(5, popup_getpos(win1).line) | ||||
|   call assert_equal(10, popup_getpos(win2).line) | ||||
|  | ||||
|   call feedkeys("\<C-C>", 'xt') | ||||
|   call assert_equal({}, popup_getpos(win1)) | ||||
|   call assert_equal(10, popup_getpos(win2).line) | ||||
|  | ||||
|   call feedkeys("\<C-C>", 'xt') | ||||
|   call assert_equal({}, popup_getpos(win1)) | ||||
|   call assert_equal({}, popup_getpos(win2)) | ||||
|  | ||||
|   call popup_clear() | ||||
| endfunc | ||||
|  | ||||
| func Test_popupwin_filter_redraw() | ||||
|   " Create two popups with a filter that closes the popup when typing "0". | ||||
|   " Both popups should close, even though the redraw also calls | ||||
|   | ||||
| @@ -704,6 +704,8 @@ static char *(features[]) = | ||||
|  | ||||
| static int included_patches[] = | ||||
| {   /* Add new patch number below this line */ | ||||
| /**/ | ||||
|     1230, | ||||
| /**/ | ||||
|     1229, | ||||
| /**/ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user