patch 9.1.1461: tabpanel: tabpanel vanishes with popup menu

Commit: 
https://github.com/vim/vim/commit/e5c96e344c2f049e1965872742cbec6c6b7ea46a
Author: Hirohito Higashi <h.east....@gmail.com>
Date:   Mon Jun 16 19:39:24 2025 +0200

    patch 9.1.1461: tabpanel: tabpanel vanishes with popup menu
    
    Problem:  tabpanel: tabpanel vanishes with popup menu
    Solution: remove pum-related test in tabpanel_leftcol(), refactor a few
              related functions (Hirohito Higashi)
    
    This commit does the following:
    - Delete unnecessary pum-related checks in the tabpanel_leftcol()
      function
    - remove pum-related check in tabpanel_leftcol()
    - The argument of the TPL_LCOL() macro has been deleted.
    - The argument of the tabpanel_leftcol() function has been changed
      to void
    - The return type of the `win_comp_pos()` function has been changed to
      void
    
    closes: #17549
    
    Signed-off-by: Hirohito Higashi <h.east....@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/autocmd.c b/src/autocmd.c
index c8e51b2b7..94f9c1fba 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -1673,7 +1673,7 @@ aucmd_prepbuf(
 #endif
 
        (void)win_split_ins(0, WSP_TOP | WSP_FORCE_ROOM, auc_win, 0, NULL);
-       (void)win_comp_pos();   // recompute window positions
+       win_comp_pos();   // recompute window positions
        p_ea = save_ea;
 #ifdef FEAT_AUTOCHDIR
        p_acd = save_acd;
@@ -1749,7 +1749,7 @@ win_found:
            close_tabpage(curtab);
 
        restore_snapshot(SNAP_AUCMD_IDX, FALSE);
-       (void)win_comp_pos();   // recompute window positions
+       win_comp_pos();   // recompute window positions
        unblock_autocmds();
 
        save_curwin = win_find_by_id(aco->save_curwin_id);
diff --git a/src/proto/tabpanel.pro b/src/proto/tabpanel.pro
index 34c3e527a..617f802c2 100644
--- a/src/proto/tabpanel.pro
+++ b/src/proto/tabpanel.pro
@@ -1,6 +1,6 @@
 /* tabpanel.c */
 int tabpanel_width(void);
-int tabpanel_leftcol(win_T *wp);
+int tabpanel_leftcol(void);
 int tabpanelopt_changed(void);
 void draw_tabpanel(void);
 int get_tabpagenr_on_tabpanel(void);
diff --git a/src/proto/window.pro b/src/proto/window.pro
index d92a5af48..44e4201fa 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -72,7 +72,7 @@ void shell_new_rows(void);
 void shell_new_columns(void);
 void win_size_save(garray_T *gap);
 void win_size_restore(garray_T *gap);
-int win_comp_pos(void);
+void win_comp_pos(void);
 void win_ensure_size(void);
 void win_setheight(int height);
 void win_setheight_win(int height, win_T *win);
diff --git a/src/tabpanel.c b/src/tabpanel.c
index d0f2d151a..77fe12f0f 100644
--- a/src/tabpanel.c
+++ b/src/tabpanel.c
@@ -137,12 +137,9 @@ tabpanel_width(void)
  * Return the offset of a window considering the width of tabpanel.
  */
     int
-tabpanel_leftcol(win_T *wp)
+tabpanel_leftcol(void)
 {
-    if (cmdline_pum_active() || (wp != NULL && WIN_IS_POPUP(wp)))
-       return 0;
-    else
-       return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width();
+    return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width();
 }
 
 /*
diff --git a/src/testdir/dumps/Test_tabpanel_with_cmdline_pum_0.dump 
b/src/testdir/dumps/Test_tabpanel_with_cmdline_pum_0.dump
new file mode 100644
index 000000000..e665e2536
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_cmdline_pum_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | 
+2#0000000#ffffff0|a@2| | +1&&@7|X+8#0000001#e0e0e08
+|a+2#0000000#ffffff0@2| @16> +0&&@24
+| +1&&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +0#0000000&@44
diff --git a/src/testdir/dumps/Test_tabpanel_with_cmdline_pum_1.dump 
b/src/testdir/dumps/Test_tabpanel_with_cmdline_pum_1.dump
new file mode 100644
index 000000000..0e60b9cad
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_cmdline_pum_1.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @12|N|a|m|e|]| @1|a@2| | 
+2#0000000#ffffff0|b@2| | +1&&@5|X+8#0000001#e0e0e08
+|a@2| @16| +0#0000000#ffffff0@24
+|b+2&&@2| @16|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +0#0000001#e0e0e08|s|e|t| @11| +1#0000000#ffffff0@3|~+0#4040ff13&| @23
+| +0#0000001#ffd7ff255|s|e|t|f|i|l|e|t|y|p|e| @3| 
+1#0000000#ffffff0@3|~+0#4040ff13&| @23
+| +0#0000001#ffd7ff255|s|e|t|g|l|o|b|a|l| @5| 
+1#0000000#ffffff0@3|~+0#4040ff13&| @23
+| +0#0000001#ffd7ff255|s|e|t|l|o|c|a|l| @6| 
+1#0000000#ffffff0@3|~+0#4040ff13&| @23
+|:+0#0000000&|s|e|t> @40
diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim
index 0d7965083..1790feef3 100644
--- a/src/testdir/test_tabpanel.vim
+++ b/src/testdir/test_tabpanel.vim
@@ -693,4 +693,31 @@ function Test_tabpanel_with_msg_scrolled()
 
   call StopVimInTerminal(buf)
 endfunc
+
+function Test_tabpanel_with_cmdline_pum()
+  CheckScreendump
+
+  let lines =<< trim END
+    set showtabpanel=2
+    set noruler
+    tabnew aaa
+    set wildoptions+=pum
+    func TimerCb(timer)
+      tabnew bbb
+    endfunc
+    call timer_start(100, 'TimerCb')
+  END
+  call writefile(lines, 'XTest_tabpanel_with_cmdline_pum', 'D')
+
+  let buf = RunVimInTerminal('-S XTest_tabpanel_with_cmdline_pum', {'rows': 
10, 'cols': 45})
+  call term_sendkeys(buf, "\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_cmdline_pum_0', {})
+  call term_sendkeys(buf, ":set\<Tab>")
+  call term_wait(buf, 120)
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_cmdline_pum_1', {})
+  call term_sendkeys(buf, "\<Esc>:tabclose\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_cmdline_pum_0', {})
+
+  call StopVimInTerminal(buf)
+endfunc
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 64e0e7807..6a65d18d0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1461,
 /**/
     1460,
 /**/
diff --git a/src/vim.h b/src/vim.h
index 58ebad3f4..88caf0ba8 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -921,10 +921,10 @@ extern int (*dyn_libintl_wputenv)(const wchar_t 
*envstring);
 
 #if defined(FEAT_TABPANEL)
 # define COLUMNS_WITHOUT_TPL()         (Columns - tabpanel_width())
-# define TPL_LCOL(W)                   tabpanel_leftcol(W)
+# define TPL_LCOL()                    tabpanel_leftcol()
 #else
 # define COLUMNS_WITHOUT_TPL()         Columns
-# define TPL_LCOL(W)                   0
+# define TPL_LCOL()                    0
 #endif
 
 #define W_ENDCOL(wp)   ((wp)->w_wincol + (wp)->w_width)
diff --git a/src/window.c b/src/window.c
index 52f4b1a8b..29bcc432b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1434,7 +1434,7 @@ win_split_ins(
     }
 
     if (flags & (WSP_TOP | WSP_BOT))
-       (void)win_comp_pos();
+       win_comp_pos();
 
      // Both windows need redrawing.  Update all status lines, in case they
      // show something related to the window count or position.
@@ -1855,7 +1855,7 @@ win_exchange(long Prenum)
     frame_fix_width(curwin);
     frame_fix_width(wp);
 
-    (void)win_comp_pos();              // recompute window positions
+    win_comp_pos();            // recompute window positions
 
     if (wp->w_buffer != curbuf)
        reset_VIsual_and_resel();
@@ -1943,7 +1943,7 @@ win_rotate(int upwards, int count)
        frame_fix_width(wp2);
 
        // recompute w_winrow and w_wincol for all windows
-       (void)win_comp_pos();
+       win_comp_pos();
     }
 
     redraw_all_later(UPD_NOT_VALID);
@@ -1972,7 +1972,7 @@ win_splitmove(win_T *wp, int size, int flags)
     winframe_remove(wp, &dir, NULL, &unflat_altfr);
     win_remove(wp, NULL);
     last_status(FALSE);            // may need to remove last status line
-    (void)win_comp_pos();   // recompute window positions
+    win_comp_pos();   // recompute window positions
 
     // Split a window on the desired side and put "wp" there.
     if (win_split_ins(size, flags, wp, dir, unflat_altfr) == FAIL)
@@ -2064,7 +2064,7 @@ win_move_after(win_T *win1, win_T *win2)
        win_append(win2, win1);
        frame_append(win2->w_frame, win1->w_frame);
 
-       (void)win_comp_pos();   // recompute w_winrow for all windows
+       win_comp_pos(); // recompute w_winrow for all windows
        redraw_later(UPD_NOT_VALID);
     }
     win_enter(win1, FALSE);
@@ -5812,7 +5812,7 @@ win_alloc(win_T *after, int hidden)
      */
     if (!hidden)
        win_append(after, new_wp);
-    new_wp->w_wincol = TPL_LCOL(NULL);
+    new_wp->w_wincol = TPL_LCOL();
     new_wp->w_width = COLUMNS_WITHOUT_TPL();
 
     // position the display and the cursor at the top of the file.
@@ -6177,7 +6177,7 @@ shell_new_rows(void)
     if (!frame_check_height(topframe, h))
        frame_new_height(topframe, h, FALSE, FALSE, FALSE);
 
-    (void)win_comp_pos();              // recompute w_winrow and w_wincol
+    win_comp_pos();            // recompute w_winrow and w_wincol
     compute_cmdrow();
     curtab->tp_ch_used = p_ch;
 
@@ -6212,7 +6212,7 @@ shell_new_columns(void)
     if (!frame_check_width(topframe, w))
        frame_new_width(topframe, w, FALSE, FALSE);
 
-    (void)win_comp_pos();              // recompute w_winrow and w_wincol
+    win_comp_pos();            // recompute w_winrow and w_wincol
 
     if (!skip_win_fix_scroll)
        win_fix_scroll(TRUE);
@@ -6277,7 +6277,7 @@ win_size_restore(garray_T *gap)
            }
        }
        // recompute the window positions
-       (void)win_comp_pos();
+       win_comp_pos();
     }
 }
 
@@ -6286,14 +6286,13 @@ win_size_restore(garray_T *gap)
  * frames.
  * Returns the row just after the last window.
  */
-    int
+    void
 win_comp_pos(void)
 {
     int                row = tabline_height();
-    int                col = TPL_LCOL(NULL);
+    int                col = TPL_LCOL();
 
     frame_comp_pos(topframe, &row, &col);
-    return row;
 }
 
 /*
@@ -6592,7 +6591,7 @@ win_setwidth_win(int width, win_T *wp)
     frame_setwidth(wp->w_frame, width + wp->w_vsep_width);
 
     // recompute the window positions
-    (void)win_comp_pos();
+    win_comp_pos();
 
     redraw_all_later(UPD_NOT_VALID);
 }
@@ -7016,7 +7015,7 @@ win_drag_vsep_line(win_T *dragwin, int offset)
        else
            fr = fr->fr_next;
     }
-    (void)win_comp_pos();
+    win_comp_pos();
     redraw_all_later(UPD_NOT_VALID);
 }
 
@@ -7480,7 +7479,7 @@ last_status_rec(frame_T *fr, int statusline)
            {
                frame_new_height(fp, fp->fr_height - 1, FALSE, FALSE, FALSE);
                frame_fix_height(wp);
-               (void)win_comp_pos();
+               win_comp_pos();
            }
            else
                win_new_height(wp, wp->w_height - 1);

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1uRDtN-002SAV-Os%40256bit.org.

Raspunde prin e-mail lui