]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1696: tabnr from getwininfo() for popup windows is always 0 v9.1.1696
authorSean Dewar <6256228+seandewar@users.noreply.github.com>
Tue, 26 Aug 2025 19:45:07 +0000 (21:45 +0200)
committerChristian Brabandt <cb@256bit.org>
Tue, 26 Aug 2025 19:45:07 +0000 (21:45 +0200)
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>
src/evalwindow.c
src/testdir/test_popupwin.vim
src/version.c

index 613df0f251d728827af19489580d42c764d9496e..9e90dffc7fc5bd96963e9bf4a82427410e1e7230 100644 (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);
index 0ee6e89108ea8d38b017f76d6e364f5dbd9f5c5c..955cc2c9d6c843bb9e562982b4b26e5cd673794f 100644 (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
index 0a90f015c2c675e745cd4e6e282994a5dfec542a..1509b97284388beda09f4cf20b025b8c18fb6ce0 100644 (file)
@@ -724,6 +724,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1696,
 /**/
     1695,
 /**/