forked from aniani/vim
patch 8.0.0948: crash if timer closes window while dragging status line
Problem: Crash if timer closes window while dragging status line. Solution: Check if the window still exists. (Yasuhiro Matsumoto, closes #1979)
This commit is contained in:
13
src/ui.c
13
src/ui.c
@@ -2709,6 +2709,8 @@ retnomove:
|
||||
#ifdef FEAT_WINDOWS
|
||||
/* find the window where the row is in */
|
||||
wp = mouse_find_win(&row, &col);
|
||||
if (wp == NULL)
|
||||
return IN_UNKNOWN;
|
||||
#else
|
||||
wp = firstwin;
|
||||
#endif
|
||||
@@ -3117,11 +3119,13 @@ mouse_comp_pos(
|
||||
/*
|
||||
* Find the window at screen position "*rowp" and "*colp". The positions are
|
||||
* updated to become relative to the top-left of the window.
|
||||
* Returns NULL when something is wrong.
|
||||
*/
|
||||
win_T *
|
||||
mouse_find_win(int *rowp, int *colp UNUSED)
|
||||
{
|
||||
frame_T *fp;
|
||||
win_T *wp;
|
||||
|
||||
fp = topframe;
|
||||
*rowp -= firstwin->w_winrow;
|
||||
@@ -3148,7 +3152,12 @@ mouse_find_win(int *rowp, int *colp UNUSED)
|
||||
}
|
||||
}
|
||||
}
|
||||
return fp->fr_win;
|
||||
/* When using a timer that closes a window the window might not actually
|
||||
* exist. */
|
||||
FOR_ALL_WINDOWS(wp)
|
||||
if (wp == fp->fr_win)
|
||||
return wp;
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -3171,6 +3180,8 @@ get_fpos_of_mouse(pos_T *mpos)
|
||||
#ifdef FEAT_WINDOWS
|
||||
/* find the window where the row is in */
|
||||
wp = mouse_find_win(&row, &col);
|
||||
if (wp == NULL)
|
||||
return IN_UNKNOWN;
|
||||
#else
|
||||
wp = firstwin;
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user