diff options
author | JP Cimalando <jp-dev@inbox.ru> | 2019-07-30 00:18:05 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-07-31 21:18:17 +0200 |
commit | bb0834637c7620870d784180436c90492c89db9b (patch) | |
tree | f8b25b86bb1a5d6f6606b86ca4b8f41f6ac54a61 | |
parent | 568d40cd8454ae20bb47cfb06d14d644ba82711d (diff) |
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.
-rw-r--r-- | pugl/detail/x11.c | 5 | ||||
-rw-r--r-- | pugl/detail/x11.h | 2 | ||||
-rw-r--r-- | test/pugl_test.c | 4 |
3 files changed, 10 insertions, 1 deletions
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; diff --git a/test/pugl_test.c b/test/pugl_test.c index f81cf99..af93caf 100644 --- a/test/pugl_test.c +++ b/test/pugl_test.c @@ -182,7 +182,9 @@ main(int argc, char** argv) puglIgnoreKeyRepeat(view, ignoreKeyRepeat); puglSetEventFunc(view, onEvent); - if (puglCreateWindow(view, "Pugl Test")) { + const uint8_t title[] = { 'P', 'u', 'g', 'l', ' ', + 'P', 'r', 0xC3, 0xBC, 'f', 'u', 'n', 'g' }; + if (puglCreateWindow(view, (const char*)title)) { return 1; } |