comparison src/ui.c @ 17219:5169811b3044 v8.1.1609

patch 8.1.1609: the user cannot easily close a popup window commit https://github.com/vim/vim/commit/2e62b568e91c36adb16dbcc609665170f09f3845 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 30 18:07:00 2019 +0200 patch 8.1.1609: the user cannot easily close a popup window Problem: The user cannot easily close a popup window. Solution: Add the "close" property. (mostly by Masato Nishihata, closes #4601)
author Bram Moolenaar <Bram@vim.org>
date Sun, 30 Jun 2019 18:15:04 +0200
parents 11f3cf51d43b
children 09fa437d33d8
comparison
equal deleted inserted replaced
17218:210c4c5f783d 17219:5169811b3044
2927 #ifdef FEAT_MENU 2927 #ifdef FEAT_MENU
2928 static int in_winbar = FALSE; 2928 static int in_winbar = FALSE;
2929 #endif 2929 #endif
2930 #ifdef FEAT_TEXT_PROP 2930 #ifdef FEAT_TEXT_PROP
2931 static int in_popup_win = FALSE; 2931 static int in_popup_win = FALSE;
2932 static win_T *click_in_popup_win = NULL;
2932 #endif 2933 #endif
2933 static int prev_row = -1; 2934 static int prev_row = -1;
2934 static int prev_col = -1; 2935 static int prev_col = -1;
2935 static win_T *dragwin = NULL; /* window being dragged */ 2936 static win_T *dragwin = NULL; /* window being dragged */
2936 static int did_drag = FALSE; /* drag was noticed */ 2937 static int did_drag = FALSE; /* drag was noticed */
2955 if (dragwin != NULL && !did_drag) 2956 if (dragwin != NULL && !did_drag)
2956 flags &= ~(MOUSE_FOCUS | MOUSE_DID_MOVE); 2957 flags &= ~(MOUSE_FOCUS | MOUSE_DID_MOVE);
2957 dragwin = NULL; 2958 dragwin = NULL;
2958 did_drag = FALSE; 2959 did_drag = FALSE;
2959 #ifdef FEAT_TEXT_PROP 2960 #ifdef FEAT_TEXT_PROP
2961 if (click_in_popup_win != NULL && popup_dragwin == NULL)
2962 popup_close_for_mouse_click(click_in_popup_win);
2963
2960 popup_dragwin = NULL; 2964 popup_dragwin = NULL;
2965 click_in_popup_win = NULL;
2961 #endif 2966 #endif
2962 } 2967 }
2963 2968
2964 if ((flags & MOUSE_DID_MOVE) 2969 if ((flags & MOUSE_DID_MOVE)
2965 && prev_row == mouse_row 2970 && prev_row == mouse_row
2999 #endif 3004 #endif
3000 #ifdef FEAT_TEXT_PROP 3005 #ifdef FEAT_TEXT_PROP
3001 // Continue a modeless selection in a popup window or dragging it. 3006 // Continue a modeless selection in a popup window or dragging it.
3002 if (in_popup_win) 3007 if (in_popup_win)
3003 { 3008 {
3009 click_in_popup_win = NULL; // don't close it on release
3004 if (popup_dragwin != NULL) 3010 if (popup_dragwin != NULL)
3005 { 3011 {
3006 // dragging a popup window 3012 // dragging a popup window
3007 popup_drag(popup_dragwin); 3013 popup_drag(popup_dragwin);
3008 return IN_UNKNOWN; 3014 return IN_UNKNOWN;
3048 // but not much else. 3054 // but not much else.
3049 if (bt_popup(wp->w_buffer)) 3055 if (bt_popup(wp->w_buffer))
3050 { 3056 {
3051 on_sep_line = 0; 3057 on_sep_line = 0;
3052 in_popup_win = TRUE; 3058 in_popup_win = TRUE;
3053 if (wp->w_popup_drag && popup_on_border(wp, row, col)) 3059 if (wp->w_popup_close == POPCLOSE_BUTTON
3060 && which_button == MOUSE_LEFT
3061 && popup_on_X_button(wp, row, col))
3062 {
3063 popup_close_for_mouse_click(wp);
3064 return IN_UNKNOWN;
3065 }
3066 else if (wp->w_popup_drag && popup_on_border(wp, row, col))
3054 { 3067 {
3055 popup_dragwin = wp; 3068 popup_dragwin = wp;
3056 popup_start_drag(wp); 3069 popup_start_drag(wp);
3057 return IN_UNKNOWN; 3070 return IN_UNKNOWN;
3058 } 3071 }
3059 if (which_button == MOUSE_LEFT) 3072 // Only close on release, otherwise it's not possible to drag or do
3073 // modeless selection.
3074 else if (wp->w_popup_close == POPCLOSE_CLICK
3075 && which_button == MOUSE_LEFT)
3076 {
3077 click_in_popup_win = wp;
3078 }
3079 else if (which_button == MOUSE_LEFT)
3060 // If the click is in the scrollbar, may scroll up/down. 3080 // If the click is in the scrollbar, may scroll up/down.
3061 popup_handle_scrollbar_click(wp, row, col); 3081 popup_handle_scrollbar_click(wp, row, col);
3062 # ifdef FEAT_CLIPBOARD 3082 # ifdef FEAT_CLIPBOARD
3063 return IN_OTHER_WIN; 3083 return IN_OTHER_WIN;
3064 # else 3084 # else
3242 // dragging a popup window 3262 // dragging a popup window
3243 popup_drag(popup_dragwin); 3263 popup_drag(popup_dragwin);
3244 return IN_UNKNOWN; 3264 return IN_UNKNOWN;
3245 } 3265 }
3246 // continue a modeless selection in a popup window 3266 // continue a modeless selection in a popup window
3267 click_in_popup_win = NULL;
3247 return IN_OTHER_WIN; 3268 return IN_OTHER_WIN;
3248 } 3269 }
3249 #endif 3270 #endif
3250 3271
3251 row -= W_WINROW(curwin); 3272 row -= W_WINROW(curwin);