Mercurial > vim
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); |