Mercurial > vim
comparison src/popupwin.c @ 18544:a6dbbedddce1 v8.1.2266
patch 8.1.2266: position unknown for a mouse click in a popup window
Commit: https://github.com/vim/vim/commit/f8b036bcae27014e4cbbdceec262b0a4c6dc2d9c
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Nov 6 21:09:17 2019 +0100
patch 8.1.2266: position unknown for a mouse click in a popup window
Problem: Position unknown for a mouse click in a popup window.
Solution: Set v:mouse_col and v:mouse_lnum. (closes https://github.com/vim/vim/issues/5171)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 06 Nov 2019 21:15:03 +0100 |
parents | 244b336b94ce |
children | e5ef5d820b5b |
comparison
equal
deleted
inserted
replaced
18543:5a689444b598 | 18544:a6dbbedddce1 |
---|---|
2860 argv[1].v_type = VAR_STRING; | 2860 argv[1].v_type = VAR_STRING; |
2861 argv[1].vval.v_string = vim_strsave(buf); | 2861 argv[1].vval.v_string = vim_strsave(buf); |
2862 | 2862 |
2863 argv[2].v_type = VAR_UNKNOWN; | 2863 argv[2].v_type = VAR_UNKNOWN; |
2864 | 2864 |
2865 if (is_mouse_key(c)) | |
2866 { | |
2867 int row = mouse_row - wp->w_winrow; | |
2868 int col = mouse_col - wp->w_wincol; | |
2869 linenr_T lnum; | |
2870 | |
2871 if (row >= 0 && col >= 0) | |
2872 { | |
2873 (void)mouse_comp_pos(wp, &row, &col, &lnum, NULL); | |
2874 set_vim_var_nr(VV_MOUSE_LNUM, lnum); | |
2875 set_vim_var_nr(VV_MOUSE_COL, col + 1); | |
2876 } | |
2877 } | |
2878 | |
2865 // NOTE: The callback might close the popup and make "wp" invalid. | 2879 // NOTE: The callback might close the popup and make "wp" invalid. |
2866 call_callback(&wp->w_filter_cb, -1, &rettv, 2, argv); | 2880 call_callback(&wp->w_filter_cb, -1, &rettv, 2, argv); |
2867 if (win_valid_popup(wp) && old_lnum != wp->w_cursor.lnum) | 2881 if (win_valid_popup(wp) && old_lnum != wp->w_cursor.lnum) |
2868 popup_highlight_curline(wp); | 2882 popup_highlight_curline(wp); |
2869 | |
2870 res = tv_get_number(&rettv); | 2883 res = tv_get_number(&rettv); |
2884 | |
2885 if (is_mouse_key(c)) | |
2886 { | |
2887 set_vim_var_nr(VV_MOUSE_LNUM, 0); | |
2888 set_vim_var_nr(VV_MOUSE_COL, 0); | |
2889 } | |
2871 vim_free(argv[1].vval.v_string); | 2890 vim_free(argv[1].vval.v_string); |
2872 clear_tv(&rettv); | 2891 clear_tv(&rettv); |
2873 return res; | 2892 return res; |
2874 } | 2893 } |
2875 | 2894 |
2889 | 2908 |
2890 if (recursive) | 2909 if (recursive) |
2891 return FALSE; | 2910 return FALSE; |
2892 recursive = TRUE; | 2911 recursive = TRUE; |
2893 | 2912 |
2894 popup_reset_handled(); | |
2895 | |
2896 if (c == K_LEFTMOUSE) | 2913 if (c == K_LEFTMOUSE) |
2897 { | 2914 { |
2898 int row = mouse_row; | 2915 int row = mouse_row; |
2899 int col = mouse_col; | 2916 int col = mouse_col; |
2900 | 2917 |
2901 wp = mouse_find_win(&row, &col, FIND_POPUP); | 2918 wp = mouse_find_win(&row, &col, FIND_POPUP); |
2902 if (wp != NULL && popup_close_if_on_X(wp, row, col)) | 2919 if (wp != NULL && popup_close_if_on_X(wp, row, col)) |
2903 res = TRUE; | 2920 res = TRUE; |
2904 } | 2921 } |
2905 | 2922 |
2923 popup_reset_handled(); | |
2906 state = get_real_state(); | 2924 state = get_real_state(); |
2907 while (!res && (wp = find_next_popup(FALSE)) != NULL) | 2925 while (!res && (wp = find_next_popup(FALSE)) != NULL) |
2908 if (wp->w_filter_cb.cb_name != NULL | 2926 if (wp->w_filter_cb.cb_name != NULL |
2909 && (wp->w_filter_mode & state) != 0) | 2927 && (wp->w_filter_mode & state) != 0) |
2910 res = invoke_popup_filter(wp, c); | 2928 res = invoke_popup_filter(wp, c); |