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