patch 8.1.1110: composing chars on space wrong when 'listchars' is set

Problem:    Composing chars on space wrong when 'listchars' is set.
Solution:   Do not use "space" and "nbsp" entries of 'listchars' when there is
            a composing character.  (Yee Cheng Chin, closes #4197)
diff --git a/src/screen.c b/src/screen.c
index e6bb335..46e3f62 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -4808,34 +4808,36 @@
 		}
 #endif
 
-		// 'list': change char 160 to lcs_nbsp and space to lcs_space.
-		if (wp->w_p_list)
+		// 'list': Change char 160 to lcs_nbsp and space to lcs_space.
+		// But not when the character is followed by a composing
+		// character (use mb_l to check that).
+		if (wp->w_p_list
+			&& ((((c == 160 && mb_l == 1)
+			      || (mb_utf8
+				  && ((mb_c == 160 && mb_l == 2)
+				      || (mb_c == 0x202f && mb_l == 3))))
+			     && lcs_nbsp)
+			    || (c == ' '
+				&& mb_l == 1
+				&& lcs_space
+				&& ptr - line <= trailcol)))
 		{
-		    if ((c == 160
-			      || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f)))
-			    && lcs_nbsp)
+		    c = (c == ' ') ? lcs_space : lcs_nbsp;
+		    if (area_attr == 0 && search_attr == 0)
 		    {
-			c = lcs_nbsp;
-			mb_c = c;
-			if (enc_utf8 && utf_char2len(c) > 1)
-			{
-			    mb_utf8 = TRUE;
-			    u8cc[0] = 0;
-			    c = 0xc0;
-			}
-			else
-			    mb_utf8 = FALSE;
+			n_attr = 1;
+			extra_attr = HL_ATTR(HLF_8);
+			saved_attr2 = char_attr; /* save current attr */
 		    }
-		    else if (c == ' ' && lcs_space && ptr - line <= trailcol)
+		    mb_c = c;
+		    if (enc_utf8 && utf_char2len(c) > 1)
 		    {
-			c = lcs_space;
-			if (mb_utf8 == FALSE && area_attr == 0 && search_attr == 0)
-			{
-			    n_attr = 1;
-			    extra_attr = HL_ATTR(HLF_8);
-			    saved_attr2 = char_attr; // save current attr
-			}
+			mb_utf8 = TRUE;
+			u8cc[0] = 0;
+			c = 0xc0;
 		    }
+		    else
+			mb_utf8 = FALSE;
 		}
 
 		if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ')