diff options
| author | Damjan Georgievski <gdamjan@gmail.com> | 2016-01-17 18:02:40 +0100 | 
|---|---|---|
| committer | Damjan Georgievski <gdamjan@gmail.com> | 2016-01-17 18:52:13 +0100 | 
| commit | c923b27caddf6a18aae89a3ed629753638bdceb7 (patch) | |
| tree | 0601b737bd70968cf8aadfae7781dd63a74dd7eb /src/api | |
| parent | 0297efb7411c9d45aacebd1e3f52601d7b4fa961 (diff) | |
| download | glutin-c923b27caddf6a18aae89a3ed629753638bdceb7.tar.gz glutin-c923b27caddf6a18aae89a3ed629753638bdceb7.zip  | |
support utf8 window titles via _NET_WM_NAME standard
based on this freerdp patch
https://github.com/FreeRDP/FreeRDP/commit/9767f7f042a58aae876e0ad3b2e7bde356c8fda9
thanks to emiliocobos on irc
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/x11/window.rs | 21 | 
1 files changed, 18 insertions, 3 deletions
diff --git a/src/api/x11/window.rs b/src/api/x11/window.rs index de9cfb6..e258926 100644 --- a/src/api/x11/window.rs +++ b/src/api/x11/window.rs @@ -672,12 +672,27 @@ impl Window {      }      pub fn set_title(&self, title: &str) { -        with_c_str(title, |title| unsafe { -            (self.x.display.xlib.XStoreName)(self.x.display.display, self.x.window, title); +        let wm_name = unsafe { +            (self.x.display.xlib.XInternAtom)(self.x.display.display, b"_NET_WM_NAME\0".as_ptr() as *const _, 0) +        }; +        self.x.display.check_errors().expect("Failed to call XInternAtom"); + +        let wm_utf8_string = unsafe { +            (self.x.display.xlib.XInternAtom)(self.x.display.display, b"UTF8_STRING\0".as_ptr() as *const _, 0) +        }; +        self.x.display.check_errors().expect("Failed to call XInternAtom"); + +        with_c_str(title, |c_title| unsafe { +            (self.x.display.xlib.XStoreName)(self.x.display.display, self.x.window, c_title); + +            let len = title.as_bytes().len(); +            (self.x.display.xlib.XChangeProperty)(self.x.display.display, self.x.window, +                                            wm_name, wm_utf8_string, 8, ffi::PropModeReplace, +                                            c_title as *const u8, len as libc::c_int);              (self.x.display.xlib.XFlush)(self.x.display.display);          }); +        self.x.display.check_errors().expect("Failed to set window title"); -        self.x.display.check_errors().expect("Failed to call XStoreName");      }      pub fn show(&self) {  | 
