[common/xutil.c] Rewrite xgettextprop properly for UTF8_STRING

This commit is contained in:
Arnaud Fontaine 2008-03-28 21:50:06 +00:00 committed by Julien Danjou
parent b0b0dcf525
commit d99586f68b
1 changed files with 23 additions and 16 deletions

View File

@ -33,32 +33,39 @@ bool
xgettextprop(xcb_connection_t *conn, xcb_window_t w, xcb_atom_t atom, xgettextprop(xcb_connection_t *conn, xcb_window_t w, xcb_atom_t atom,
char *text, ssize_t textlen) char *text, ssize_t textlen)
{ {
xcb_get_property_reply_t *name = NULL; xcb_get_property_reply_t *prop_r = NULL;
char *prop_val = NULL; void *prop_val;
if(!text || !textlen) if(!text || !textlen)
return false; return false;
text[0] = '\0'; text[0] = '\0';
name = xcb_get_property_reply(conn, prop_r = xcb_get_property_reply(conn,
xcb_get_property_unchecked(conn, false, xcb_get_property_unchecked(conn, false,
w, atom, w, atom,
XCB_GET_PROPERTY_TYPE_ANY, XCB_GET_PROPERTY_TYPE_ANY,
0L, 1000000L), 0L, 1000000L),
NULL); NULL);
if(!name->value_len)
if(!prop_r || !prop_r->value_len || prop_r->format != 8)
{
if(prop_r)
p_delete(&prop_r);
return false; return false;
}
prop_val = (char *) xcb_get_property_value(name); prop_val = xcb_get_property_value(prop_r);
/* TODO: XCB doesn't provide a XmbTextPropertyToTextList(), check /* Check whether the returned property value is just an ascii
* whether this code is correct (locales) */ * string or utf8 string. At the moment it doesn't handle
if(name->type == STRING || name->format == 8) * COMPOUND_TEXT and multibyte but it's not needed... */
a_strncpy(text, name->value_len + 1, prop_val, textlen - 1); if(prop_r->type == STRING ||
prop_r->type == xutil_intern_atom(conn, "UTF8_STRING"))
a_strncpy(text, prop_r->value_len + 1, prop_val, textlen - 1);
text[textlen - 1] = '\0'; p_delete(&prop_r);
p_delete(&name);
return true; return true;
} }