patch 9.1.1696: tabnr from getwininfo() for popup windows is always 0

Problem:  getwininfo() has logic for getting the tabnr of a local popup
          window, but due to only breaking from the inner loop, tp is
          eventually set to NULL, so tabnr is always 0.
Solution: Break out of both loops, continue to use 0 for global popup
          windows (Sean Dewar).

closes: #18111

Signed-off-by: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Sean Dewar
2025-08-26 21:45:07 +02:00
committed by Christian Brabandt
parent 477c893c0a
commit 7d6be2cead
3 changed files with 20 additions and 2 deletions

View File

@ -563,9 +563,10 @@ f_getwininfo(typval_T *argvars, typval_T *rettv)
{
tabnr++;
FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
if (wp == wparg)
break;
if (wp == wparg)
goto found;
}
found:
d = get_win_info(wparg, tp == NULL ? 0 : tabnr, 0);
if (d != NULL)
list_append_dict(rettv->vval.v_list, d);

View File

@ -4619,4 +4619,19 @@ func Test_popupwin_bottom_position_without_decoration()
call StopVimInTerminal(buf)
endfunc
func Test_popup_getwininfo_tabnr()
tab split
let winid1 = popup_create('sup', #{tabpage: 1})
let winid2 = popup_create('sup', {})
let winid3 = popup_create('sup', #{tabpage: -1})
call assert_equal(1, getwininfo(winid1)[0].tabnr)
call assert_equal(2, getwininfo(winid2)[0].tabnr)
call assert_equal(0, getwininfo(winid3)[0].tabnr)
call popup_close(winid1)
call popup_close(winid2)
call popup_close(winid3)
tabonly
endfunc
" vim: shiftwidth=2 sts=2

View File

@ -724,6 +724,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1696,
/**/
1695,
/**/