From 6ffe020b919e8d1f1e74a293ca301b3ce0a9ecc7 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Mon, 9 Feb 2026 19:08:24 +0000 Subject: [PATCH] patch 9.1.2143: wrong rendering of popups when overlapping wide char Problem: When a popup window partially overlaps a wide character it results in truncated or garbage display. Solution: When a wide character is partially blocked by a popup, clear both cells in the screen buffer to prevent garbage (Yasuhiro Matsumoto). closes: #19271 Signed-off-by: Yasuhiro Matsumoto Signed-off-by: Christian Brabandt --- runtime/doc/version9.txt | 12 +++++++++++- src/screen.c | 3 +++ src/version.c | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index c5ed3da001..462a048486 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2026 Feb 08 +*version9.txt* For Vim version 9.1. Last change: 2026 Feb 09 VIM REFERENCE MANUAL by Bram Moolenaar @@ -52532,4 +52532,14 @@ Patch 9.1.2141 Problem: Truncation when serializing libsodium encryption parameters. Solution: Correctly cast to long long type (Yasuhiro Matsumoto). +Patch 9.1.2142 +Problem: MS-Windows: mouse scroll events not handled for popups +Solution: Do not return early (Mao-Yining) + +Patch 9.1.2143 +Problem: When a popup window partially overlaps a wide character + it results in truncated or garbage display. +Solution: When a wide character is partially blocked by a popup, clear both + cells in the screen buffer to prevent garbage (Yasuhiro Matsumoto). + vim:tw=78:ts=8:noet:ft=help:norl:fdm=manual:nofoldenable diff --git a/src/screen.c b/src/screen.c index 57f37966c9..3cd3ad39f8 100644 --- a/src/screen.c +++ b/src/screen.c @@ -586,6 +586,9 @@ screen_line( // Do not redraw if under the popup menu. if (redraw_this && skip_for_popup(row, col + coloff)) redraw_this = FALSE; + // Also skip the second cell for double-width characters. + if (redraw_this && char_cells == 2 && skip_for_popup(row, col + coloff + 1)) + redraw_this = FALSE; if (redraw_this) { diff --git a/src/version.c b/src/version.c index 6a6eaecb92..24f3ea3cee 100644 --- a/src/version.c +++ b/src/version.c @@ -734,6 +734,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2143, /**/ 2142, /**/