Convert window title to UCS-2 when updating it, don’t update it if it didn’t change
This commit is contained in:
parent
4f8e704017
commit
6df039c3b5
|
@ -215,6 +215,7 @@ struct Client {
|
|||
|
||||
/* Name (= window title) */
|
||||
char *name;
|
||||
int name_len;
|
||||
|
||||
/* fullscreen is pretty obvious */
|
||||
bool fullscreen;
|
||||
|
|
|
@ -495,8 +495,24 @@ int handle_windowname_change(void *data, xcb_connection_t *conn, uint8_t state,
|
|||
return 1;
|
||||
|
||||
/* Save the old pointer to make the update atomic */
|
||||
char *new_name;
|
||||
int new_len;
|
||||
asprintf(&new_name, "%.*s", xcb_get_property_value_length(prop), (char*)xcb_get_property_value(prop));
|
||||
/* Convert it to UCS-2 here for not having to convert it later every time we want to pass it to X */
|
||||
char *ucs2_name = convert_utf8_to_ucs2(new_name, &new_len);
|
||||
free(new_name);
|
||||
|
||||
/* Check if they are the same and don’t update if so */
|
||||
if (new_len == client->name_len && strcmp(client->name, new_name) == 0) {
|
||||
LOG("Name did not change, not updating\n");
|
||||
free(ucs2_name);
|
||||
return;
|
||||
}
|
||||
|
||||
char *old_name = client->name;
|
||||
asprintf(&(client->name), "%.*s", xcb_get_property_value_length(prop), (char*)xcb_get_property_value(prop));
|
||||
client->name = ucs2_name;
|
||||
client->name_len = new_len;
|
||||
|
||||
if (old_name != NULL)
|
||||
free(old_name);
|
||||
LOG("rename to \"%s\".\n", client->name);
|
||||
|
|
|
@ -169,11 +169,8 @@ void decorate_window(xcb_connection_t *conn, Client *client, xcb_drawable_t draw
|
|||
uint32_t values[] = { text_color, background_color, font->id };
|
||||
xcb_change_gc(conn, gc, mask, values);
|
||||
|
||||
int real_strlen;
|
||||
char *ucs2_label = convert_utf8_to_ucs2(client->name, &real_strlen);
|
||||
xcb_image_text_16(conn, real_strlen, drawable, gc, 3 /* X */,
|
||||
offset + font->height /* Y = baseline of font */, (xcb_char2b_t*)ucs2_label);
|
||||
free(ucs2_label);
|
||||
xcb_image_text_16(conn, client->name_len, drawable, gc, 3 /* X */,
|
||||
offset + font->height /* Y = baseline of font */, (xcb_char2b_t*)client->name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue