patch 8.1.2362: cannot place signs in a popup window

Problem:    Cannot place signs in a popup window. (Maxim Kim)
Solution:   Use the group prefix "PopUp" to specify which signs should show up
            in a popup window. (closes #5277)
This commit is contained in:
Bram Moolenaar
2019-11-30 14:21:53 +01:00
parent 310c32e892
commit 7257073043
5 changed files with 34 additions and 7 deletions

View File

@ -138,7 +138,20 @@ sign_in_group(sign_entry_T *sign, char_u *group)
return ((group != NULL && STRCMP(group, "*") == 0)
|| (group == NULL && sign->se_group == NULL)
|| (group != NULL && sign->se_group != NULL
&& STRCMP(group, sign->se_group->sg_name) == 0));
&& STRCMP(group, sign->se_group->sg_name) == 0));
}
/*
* Return TRUE if "sign" is to be displayed in window "wp".
* If the group name starts with "PopUp" it only shows in a popup window.
*/
static int
sign_group_for_window(sign_entry_T *sign, win_T *wp)
{
int for_popup = sign->se_group != NULL
&& STRNCMP("PopUp", sign->se_group->sg_name, 5) == 0;
return WIN_IS_POPUP(wp) ? for_popup : !for_popup;
}
/*
@ -484,8 +497,7 @@ buf_get_signattrs(win_T *wp, linenr_T lnum, sign_attrs_T *sattr)
if (sign->se_lnum == lnum
# ifdef FEAT_TEXT_PROP
&& sign_in_group(sign, (char_u *)"popupmenu")
== (WIN_IS_POPUP(wp) ? TRUE : FALSE)
&& sign_group_for_window(sign, wp)
# endif
)
{
@ -2645,8 +2657,7 @@ get_first_valid_sign(win_T *wp)
sign_entry_T *sign = wp->w_buffer->b_signlist;
# ifdef FEAT_TEXT_PROP
while (sign != NULL && sign_in_group(sign, (char_u *)"popupmenu")
== (WIN_IS_POPUP(wp) ? FALSE : TRUE))
while (sign != NULL && !sign_group_for_window(sign, wp))
sign = sign->se_next;
# endif
return sign;