shiny/driver: s/WM_NAME/_NET_WM_NAME/ for X11.
https://specifications.freedesktop.org/wm-spec/latest/ar01s05.html#idm139870830016992
says that modern window managers should prefer the latter to the former.
The former might also have difficulties with non-ASCII UTF-8.
Also fix a recently introduce build breakage.
Change-Id: Id6da9aa23ad356d7e485925734c28d891be0f2fc
Reviewed-on: https://go-review.googlesource.com/37413
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
diff --git a/shiny/driver/gldriver/x11.c b/shiny/driver/gldriver/x11.c
index dcb583d..ee4827c 100644
--- a/shiny/driver/gldriver/x11.c
+++ b/shiny/driver/gldriver/x11.c
@@ -10,9 +10,9 @@
#include <stdlib.h>
#include <string.h>
+Atom net_wm_name;
Atom utf8_string;
Atom wm_delete_window;
-Atom wm_name;
Atom wm_protocols;
Atom wm_take_focus;
@@ -131,9 +131,9 @@
exit(1);
}
+ net_wm_name = XInternAtom(x_dpy, "_NET_WM_NAME", False);
utf8_string = XInternAtom(x_dpy, "UTF8_STRING", False);
wm_delete_window = XInternAtom(x_dpy, "WM_DELETE_WINDOW", False);
- wm_name = XInternAtom(x_dpy, "WM_NAME", False);
wm_protocols = XInternAtom(x_dpy, "WM_PROTOCOLS", False);
wm_take_focus = XInternAtom(x_dpy, "WM_TAKE_FOCUS", False);
@@ -260,7 +260,7 @@
XSetWMProtocols(x_dpy, win, atoms, 2);
XSetStandardProperties(x_dpy, win, "", "App", None, (char **)NULL, 0, &sizehints);
- XChangeProperty(x_dpy, win, wm_name, utf8_string, 8, PropModeReplace, title, title_len);
+ XChangeProperty(x_dpy, win, net_wm_name, utf8_string, 8, PropModeReplace, title, title_len);
return win;
}
diff --git a/shiny/driver/gldriver/x11.go b/shiny/driver/gldriver/x11.go
index 0f0e376..b32cbc7 100644
--- a/shiny/driver/gldriver/x11.go
+++ b/shiny/driver/gldriver/x11.go
@@ -19,7 +19,7 @@
void makeCurrent(uintptr_t ctx);
void swapBuffers(uintptr_t ctx);
void doCloseWindow(uintptr_t id);
-uintptr_t doNewWindow(int width, int height, char* title);
+uintptr_t doNewWindow(int width, int height, char* title, int title_len);
uintptr_t doShowWindow(uintptr_t id);
uintptr_t surfaceCreate();
*/
@@ -53,13 +53,14 @@
func newWindow(opts *screen.NewWindowOptions) (uintptr, error) {
width, height := optsSize(opts)
- title := C.CString(opts.GetTitle())
- defer C.free(unsafe.Pointer(title))
+ title := opts.GetTitle()
+ ctitle := C.CString(title)
+ defer C.free(unsafe.Pointer(ctitle))
retc := make(chan uintptr)
uic <- uiClosure{
f: func() uintptr {
- return uintptr(C.doNewWindow(C.int(width), C.int(height), title, C.int(len(title))))
+ return uintptr(C.doNewWindow(C.int(width), C.int(height), ctitle, C.int(len(title))))
},
retc: retc,
}
diff --git a/shiny/driver/x11driver/screen.go b/shiny/driver/x11driver/screen.go
index e3f01af..755c5a6 100644
--- a/shiny/driver/x11driver/screen.go
+++ b/shiny/driver/x11driver/screen.go
@@ -33,6 +33,7 @@
xsi *xproto.ScreenInfo
keysyms x11key.KeysymTable
+ atomNETWMName xproto.Atom
atomUTF8String xproto.Atom
atomWMDeleteWindow xproto.Atom
atomWMProtocols xproto.Atom
@@ -424,7 +425,7 @@
s.setProperty(xw, s.atomWMProtocols, s.atomWMDeleteWindow, s.atomWMTakeFocus)
title := []byte(opts.GetTitle())
- xproto.ChangeProperty(s.xc, xproto.PropModeReplace, xw, xproto.AtomWmName, s.atomUTF8String, 8, uint32(len(title)), title)
+ xproto.ChangeProperty(s.xc, xproto.PropModeReplace, xw, s.atomNETWMName, s.atomUTF8String, 8, uint32(len(title)), title)
xproto.CreateGC(s.xc, xg, xproto.Drawable(xw), 0, nil)
render.CreatePicture(s.xc, xp, xproto.Drawable(xw), pictformat, 0, nil)
@@ -434,6 +435,10 @@
}
func (s *screenImpl) initAtoms() (err error) {
+ s.atomNETWMName, err = s.internAtom("_NET_WM_NAME")
+ if err != nil {
+ return err
+ }
s.atomUTF8String, err = s.internAtom("UTF8_STRING")
if err != nil {
return err