x11: simplify setting unicode text properties

This commit is contained in:
wm4 2011-12-26 17:15:11 +01:00
parent 34b22ec6ea
commit 2e0bae181f
1 changed files with 6 additions and 22 deletions

View File

@ -993,34 +993,18 @@ static int vo_x11_get_gnome_layer(struct vo_x11_state *x11, Window win)
return WIN_LAYER_NORMAL; return WIN_LAYER_NORMAL;
} }
// set a X text property that expects a STRING type // set a X text property that expects a STRING or COMPOUND_TEXT type
static void vo_x11_set_property_string(struct vo *vo, Atom name, const char *t) static void vo_x11_set_property_string(struct vo *vo, Atom name, const char *t)
{ {
struct vo_x11_state *x11 = vo->x11; struct vo_x11_state *x11 = vo->x11;
XTextProperty prop = {0}; XTextProperty prop = {0};
int success;
success = Xutf8TextListToTextProperty(x11->display, (char **)&t, 1, if (Xutf8TextListToTextProperty(x11->display, (char **)&t, 1,
XStringStyle, &prop); XStdICCTextStyle, &prop) == Success)
{
// The call can fail if the string uses characters not in the STRING
// encoding (which is latin-1 as far as I can tell). Try COMPOUND_TEXT
// instead. (It is possible that COMPOUND_TEXT always works, but since the
// difference in the type used for the property is visible to the Window
// manager and the ICCCM seems to specify STRING, we're trying to be careful
// and try STRING first.)
// GTK seems to follow about the same fallback mechanism.
if (success != Success) {
XFree(prop.value);
prop.value = NULL;
success = Xutf8TextListToTextProperty(x11->display, (char **)&t, 1,
XCompoundTextStyle, &prop);
}
if (success == Success)
XSetTextProperty(x11->display, x11->window, &prop, name); XSetTextProperty(x11->display, x11->window, &prop, name);
XFree(prop.value);
XFree(prop.value); }
} }
// set a X text property that expects a UTF8_STRING type // set a X text property that expects a UTF8_STRING type