[PATCH 2/2] Fix UTF-8 usage in icon title

2 views
Skip to first unread message

david.m...@gmail.com

unread,
Dec 29, 2025, 10:12:12 AM (4 days ago) 12/29/25
to Window Maker Development
When pango is enabled and a window title contains UTF-8 chars,
there is a chance the miniaturized icon title will cut in 2 an UTF-8 char
leading to a glitch in the title (see screenshot enclosed).
Additionally you would also see those kind of warning in the logs :
(process:35688): Pango-WARNING **: 09:46:03.903: Invalid UTF-8 string passed to pango_layout_set_text()

---
 src/misc.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/misc.c b/src/misc.c
index 4cab3584..ffd97e6e 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -259,13 +259,22 @@ void slide_windows(Window wins[], int n, int from_x, int from_y, int to_x, int t
  eatExpose();
 }
 
+/* find the start of a UTF-8 character at or before the given position */
+static int utf8_find_char_start(const char *string, int pos)
+{
+ while (pos > 0 && (string[pos] & 0xC0) == 0x80) {
+ pos--;
+ }
+ return pos;
+}
+
 char *ShrinkString(WMFont *font, const char *string, int width)
 {
  int w, w1 = 0;
  int p;
  char *pos;
  char *text;
- int p1, p2, t;
+ int p1, p2, t, utf8_safe_pos;
 
  p = strlen(string);
  w = WMWidthOfString(font, string, p);
@@ -303,7 +312,11 @@ char *ShrinkString(WMFont *font, const char *string, int width)
  p2 = p;
  t = (p2 - p1) / 2;
  while (p2 > p1 && p1 != t) {
- w = WMWidthOfString(font, &string[p - t], t);
+ /* ensure we cut at UTF-8 character boundary */
+ utf8_safe_pos = utf8_find_char_start(string, p - t);
+ t = p - utf8_safe_pos;
+
+ w = WMWidthOfString(font, &string[utf8_safe_pos], t);
  if (w > width) {
  p2 = t;
  t = p1 + (p2 - p1) / 2;
@@ -313,7 +326,10 @@ char *ShrinkString(WMFont *font, const char *string, int width)
  } else
  p2 = p1 = t;
  }
- strcat(text, &string[p - p1]);
+
+ /* ensure final cut is at UTF-8 character boundary */
+ utf8_safe_pos = utf8_find_char_start(string, p - p1);
+ strcat(text, &string[utf8_safe_pos]);
 
  return text;
 }
--
2.43.0
before.png
0002-Fix-UTF-8-usage-in-icon-title.patch
Reply all
Reply to author
Forward
0 new messages