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