mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-25 06:41:31 +11:00
Merge pull request #709 from gdamjan/support-utf8-window-title
support utf8 window titles via _NET_WM_NAME standard
This commit is contained in:
commit
3246613a51
|
@ -469,10 +469,6 @@ impl Window {
|
||||||
display.check_errors().expect("Failed to call XInternAtom");
|
display.check_errors().expect("Failed to call XInternAtom");
|
||||||
(display.xlib.XSetWMProtocols)(display.display, window, &mut wm_delete_window, 1);
|
(display.xlib.XSetWMProtocols)(display.display, window, &mut wm_delete_window, 1);
|
||||||
display.check_errors().expect("Failed to call XSetWMProtocols");
|
display.check_errors().expect("Failed to call XSetWMProtocols");
|
||||||
with_c_str(&*window_attrs.title, |title| {;
|
|
||||||
(display.xlib.XStoreName)(display.display, window, title);
|
|
||||||
});
|
|
||||||
display.check_errors().expect("Failed to call XStoreName");
|
|
||||||
(display.xlib.XFlush)(display.display);
|
(display.xlib.XFlush)(display.display);
|
||||||
display.check_errors().expect("Failed to call XFlush");
|
display.check_errors().expect("Failed to call XFlush");
|
||||||
|
|
||||||
|
@ -636,6 +632,8 @@ impl Window {
|
||||||
input_handler: Mutex::new(XInputEventHandler::new(display, window, ic, window_attrs))
|
input_handler: Mutex::new(XInputEventHandler::new(display, window, ic, window_attrs))
|
||||||
};
|
};
|
||||||
|
|
||||||
|
window.set_title(&window_attrs.title);
|
||||||
|
|
||||||
if window_attrs.visible {
|
if window_attrs.visible {
|
||||||
unsafe {
|
unsafe {
|
||||||
let ref x_window: &XWindow = window.x.borrow();
|
let ref x_window: &XWindow = window.x.borrow();
|
||||||
|
@ -669,12 +667,27 @@ impl Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_title(&self, title: &str) {
|
pub fn set_title(&self, title: &str) {
|
||||||
with_c_str(title, |title| unsafe {
|
let wm_name = unsafe {
|
||||||
(self.x.display.xlib.XStoreName)(self.x.display.display, self.x.window, title);
|
(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.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) {
|
pub fn show(&self) {
|
||||||
|
|
Loading…
Reference in a new issue