# HG changeset patch # User Bram Moolenaar # Date 1559475005 -7200 # Node ID 60c9ac14a2ecc21d929ef04e31ed314354fd08c5 # Parent bdd52b0f05f544e66c5f8e6e05cf4bce92b0c6ae patch 8.1.1447: not allowed to create an empty popup commit https://github.com/vim/vim/commit/7b29dd850752b975baef47b66c590f5e978ad847 Author: Bram Moolenaar Date: Sun Jun 2 13:22:11 2019 +0200 patch 8.1.1447: not allowed to create an empty popup Problem: Not allowed to create an empty popup. Solution: Remove restriction that there is some text. (closes https://github.com/vim/vim/issues/4470) diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -488,12 +488,8 @@ popup_create(typval_T *argvars, typval_T int nr; // Check arguments look OK. - if (!(argvars[0].v_type == VAR_STRING - && argvars[0].vval.v_string != NULL - && STRLEN(argvars[0].vval.v_string) > 0) - && !(argvars[0].v_type == VAR_LIST - && argvars[0].vval.v_list != NULL - && argvars[0].vval.v_list->lv_len > 0)) + if (!(argvars[0].v_type == VAR_STRING && argvars[0].vval.v_string != NULL) + && !(argvars[0].v_type == VAR_LIST && argvars[0].vval.v_list != NULL)) { emsg(_(e_listreq)); return; @@ -560,12 +556,15 @@ popup_create(typval_T *argvars, typval_T { list_T *l = argvars[0].vval.v_list; - if (l->lv_first->li_tv.v_type == VAR_STRING) - // list of strings - add_popup_strings(buf, l); - else - // list of dictionaries - add_popup_dicts(buf, l); + if (l->lv_len > 0) + { + if (l->lv_first->li_tv.v_type == VAR_STRING) + // list of strings + add_popup_strings(buf, l); + else + // list of dictionaries + add_popup_dicts(buf, l); + } } // Delete the line of the empty buffer. diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -596,3 +596,17 @@ func Test_popup_close_callback() call popup_close(winid, 'done') call assert_equal('done', g:result) endfunc + +func Test_popup_empty() + let winid = popup_create('', {'padding': [2,2,2,2]}) + redraw + let pos = popup_getpos(winid) + call assert_equal(4, pos.width) + call assert_equal(5, pos.height) + + let winid = popup_create([], {'border': []}) + redraw + let pos = popup_getpos(winid) + call assert_equal(2, pos.width) + call assert_equal(3, pos.height) +endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1447, +/**/ 1446, /**/ 1445,