From c9e1912eb741daee231034c140b8f5b0b11d0871 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Tue, 18 Nov 2014 10:27:45 +1000 Subject: [PATCH] Add support for with_visibility(), show(), hide() on X11. --- src/x11/ffi.rs | 2 ++ src/x11/window/mod.rs | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/x11/ffi.rs b/src/x11/ffi.rs index 6fbfd816..b7e73793 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 64461a89..fd63d609 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)> {