diff --git a/include/wlr/xwayland.h b/include/wlr/xwayland.h index b2c236675..53c777d70 100644 --- a/include/wlr/xwayland.h +++ b/include/wlr/xwayland.h @@ -103,6 +103,7 @@ struct wlr_xwayland_surface { char *class; char *instance; pid_t pid; + bool has_utf8_title; struct wl_list children; // wlr_xwayland_surface::parent_link struct wlr_xwayland_surface *parent; diff --git a/xwayland/xwm.c b/xwayland/xwm.c index b97a17532..7c9cd3045 100644 --- a/xwayland/xwm.c +++ b/xwayland/xwm.c @@ -353,8 +353,10 @@ static void read_surface_title(struct wlr_xwm *xwm, return; } - // TODO: if reply->type == XCB_ATOM_STRING, uses latin1 encoding - // if reply->type == xwm->atoms[UTF8_STRING], uses utf8 encoding + bool is_utf8 = reply->type == xwm->atoms[UTF8_STRING]; + if (!is_utf8 && xsurface->has_utf8_title) { + return; + } size_t len = xcb_get_property_value_length(reply); char *title = xcb_get_property_value(reply); @@ -365,6 +367,7 @@ static void read_surface_title(struct wlr_xwm *xwm, } else { xsurface->title = NULL; } + xsurface->has_utf8_title = is_utf8; wlr_log(L_DEBUG, "XCB_ATOM_WM_NAME: %s", xsurface->title); wlr_signal_emit_safe(&xsurface->events.set_title, xsurface);