Adding to gettextprop in dwm.c: // ... if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems) return 0; FILE* log = fopen("/home/user/dwm.log", "at"); fprintf(log, "---------------\n"); fprintf(log, "atom = {%lu}\n", atom); fprintf(log, "text = {%s}\n", text); fprintf(log, "value = {%s}\n", name.value); fprintf(log, "encoding = {%lu}\n", name.encoding); fprintf(log, "format = {%d}\n", name.format); fprintf(log, "nitems = {%lu}\n", name.nitems); fclose(log); if (name.encoding == XA_STRING) { // ...
I got: --------------- atom = {39} text = {} value = {this<E1>test.odt - LibreOffice Writer} encoding = {31} format = {8} nitems = {34} --------------- atom = {39} text = {} value = {this<E1>testL<FA>.odt - LibreOffice Writer} encoding = {385} format = {8} nitems = {38} So COMPOUND_TEXT sets the encoding field of XTextProperty to 385, a value not listed in Xatom.h, while STRING sets it to 31 (XA_STRING). The code: if (name.encoding == XA_STRING) { strncpy(text, (char *)name.value, size - 1); } else if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { strncpy(text, *list, size - 1); XFreeStringList(list); } converts any string not having XA_STRING as encoding with XmbTextPropertyToTextList[1]. The issue is that ISO 8859-1-encoded text, marked as XA_STRING, is copied with strncpy, and treated as UTF-8 later on in drw_text in drw.c. It probably should be converted to UTF-8 from the current locale, even when encoding field is set to XA_STRING. However, when I commented out the first branch like this: /*if (name.encoding == XA_STRING) { strncpy(text, (char *)name.value, size - 1); } else*/ if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { strncpy(text, *list, size - 1); XFreeStringList(list); } The document title in LibreOffice was shown correctly. *However*, the output from slstatus, containing UTF-8 while having the encoding field also set to XA_STRING, was *not* shown correctly, even though the description of XmbTextPropertyToTextList states that > The input text strings must be given in the current locale encoding (for > XmbTextListToTextProperty and XwcTextListToTextProperty), or in UTF-8 > encoding > (for Xutf8TextListToTextProperty). and my LANG is set to sr_RS.UTF-8 (so my "current locale encoding" should be UTF-8). So, this would be a workaround, but one with further potential issues. [1]: https://linux.die.net/man/3/xmbtextpropertytotextlist