bbidulock / icewm

A window manager designed for speed, usability, and consistency
Other
596 stars 99 forks source link

Non-western locale chars not rendered in window or taskbar #502

Closed Code7R closed 2 years ago

Code7R commented 4 years ago

I saw this problem while working on #500 but I think I observed this for a couple of years now, just didn't bother to report.

Repro: start icewm with a western EU locale, like de_DE.UTF-8 open a web browser and navigate to some Cyrrllic using site, like https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%82%D0%BE%D1%87%D0%B8%D0%B5 (this is the Russian site for Unicode Ellipsis)

Result: all non-Latin characters in the taskbar are not shown, only the "... - Mozilla Firefox" suffix is readable. Same for Window titles. But trying the same in other WM like WindowMaker shows no issues, the full window title is shown correctly.

That said, I see some flaws in yfontxft.cc. YXftFont::partitions is just strange - call of XftGlyphExists passes *c as the third parameter of XftCharExists but that expects UCS4/UTF32 value, not a stupid byte value.

@gijsbers Would you confirm or is there any magic behind the curtain?

But that might be not the only issue.

Code7R commented 4 years ago

This seems to come from Xft itself, the brief evaluation of YXftFont::paritions was maybe misleading. Because if the locale is set to the particular country, it works. The workaround I have found so far is setting is this: LANG=de_DE.UTF-8 LC_CTYPE=ru_RU.UTF-8 icewm

However, this only works when set explicitly before start, like from ~/.Xsession (not tested). When this is put into ~/.icewm/env then it seems to be only effective for menüs and clock (i.e. I use time format string for testing). The window titles are still not rendered properly.

TimeFormat="Time/时候/Zöit/ВРЕМЯ: %H:%M"

Edit: This workaround does not work anymore in latest Debian, a better solution is needed.