diff options
Diffstat (limited to 'src/x11')
-rw-r--r-- | src/x11/ffi.rs | 2 | ||||
-rw-r--r-- | src/x11/window/mod.rs | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/x11/ffi.rs b/src/x11/ffi.rs index 6fbfd81..b7e7379 100644 --- a/src/x11/ffi.rs +++ b/src/x11/ffi.rs @@ -1426,6 +1426,8 @@ extern "C" { index: libc::c_int) -> KeySym; pub fn XMoveWindow(display: *mut Display, w: Window, x: libc::c_int, y: libc::c_int); pub fn XMapWindow(display: *mut Display, w: Window); + pub fn XMapRaised(display: *mut Display, w: Window); + pub fn XUnmapWindow(display: *mut Display, w: Window); pub fn XNextEvent(display: *mut Display, event_return: *mut XEvent); pub fn XInitThreads() -> Status; pub fn XOpenDisplay(display_name: *const libc::c_char) -> *mut Display; diff --git a/src/x11/window/mod.rs b/src/x11/window/mod.rs index 64461a8..fd63d60 100644 --- a/src/x11/window/mod.rs +++ b/src/x11/window/mod.rs @@ -163,12 +163,19 @@ impl Window { win }; + // set visibility + if builder.visible { + unsafe { + ffi::XMapRaised(display, window); + ffi::XFlush(display); + } + } + // creating window, step 2 let wm_delete_window = unsafe { use std::c_str::ToCStr; let delete_window = "WM_DELETE_WINDOW".to_c_str(); - ffi::XMapWindow(display, window); let mut wm_delete_window = ffi::XInternAtom(display, delete_window.as_ptr(), 0); ffi::XSetWMProtocols(display, window, &mut wm_delete_window, 1); let c_title = builder.title.to_c_str(); @@ -287,9 +294,17 @@ impl Window { } pub fn show(&self) { + unsafe { + ffi::XMapRaised(self.display, self.window); + ffi::XFlush(self.display); + } } pub fn hide(&self) { + unsafe { + ffi::XUnmapWindow(self.display, self.window); + ffi::XFlush(self.display); + } } fn get_geometry(&self) -> Option<(int, int, uint, uint)> { |