From bb0834637c7620870d784180436c90492c89db9b Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Tue, 30 Jul 2019 00:18:05 +0200 Subject: X11: Support UTF8 in window titles It's possible that this does bad things if a UTF8 string is used on a system that does not support it (because XStoreName is still called), but I have no idea how likely this scenario is. Leaving it this way because it means the ASCII case will still work everywhere, and it's easy enough to avoid if this is a problem. --- pugl/detail/x11.c | 5 +++++ pugl/detail/x11.h | 2 ++ 2 files changed, 7 insertions(+) (limited to 'pugl') diff --git a/pugl/detail/x11.c b/pugl/detail/x11.c index a076d6f..32f1393 100644 --- a/pugl/detail/x11.c +++ b/pugl/detail/x11.c @@ -75,8 +75,10 @@ puglCreateWindow(PuglView* view, const char* title) impl->screen = DefaultScreen(display); // Intern the various atoms we will need + impl->atoms.UTF8_STRING = XInternAtom(display, "UTF8_STRING", 0); impl->atoms.WM_PROTOCOLS = XInternAtom(display, "WM_PROTOCOLS", 0); impl->atoms.WM_DELETE_WINDOW = XInternAtom(display, "WM_DELETE_WINDOW", 0); + impl->atoms.NET_WM_NAME = XInternAtom(display, "_NET_WM_NAME", 0); impl->atoms.NET_WM_STATE = XInternAtom(display, "_NET_WM_STATE", 0); impl->atoms.NET_WM_STATE_DEMANDS_ATTENTION = XInternAtom(display, "_NET_WM_STATE_DEMANDS_ATTENTION", 0); @@ -132,6 +134,9 @@ puglCreateWindow(PuglView* view, const char* title) if (title) { XStoreName(display, win, title); + XChangeProperty(display, win, + impl->atoms.NET_WM_NAME, impl->atoms.UTF8_STRING, 8, + PropModeReplace, (const uint8_t*)title, strlen(title)); } if (!view->parent) { diff --git a/pugl/detail/x11.h b/pugl/detail/x11.h index 98f42b0..1ead119 100644 --- a/pugl/detail/x11.h +++ b/pugl/detail/x11.h @@ -33,8 +33,10 @@ struct PuglInternalsImpl { PuglSurface* surface; struct { + Atom UTF8_STRING; Atom WM_PROTOCOLS; Atom WM_DELETE_WINDOW; + Atom NET_WM_NAME; Atom NET_WM_STATE; Atom NET_WM_STATE_DEMANDS_ATTENTION; } atoms; -- cgit v1.2.1