From f9126c4f8380830cab09f00a99c20cf204e0f1a9 Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Mon, 10 Sep 2018 20:44:07 -0500 Subject: [PATCH] get active window --- src/gui.rs | 10 ++++------ xlib/src/display.rs | 12 ++++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui.rs b/src/gui.rs index 5528ebf..72ceb26 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -20,12 +20,10 @@ impl GUI { /// Get the active window. pub fn get_active_window(&self) -> Result { - Ok(self.display.get_default_root_window()?) - // let mut window: Window = self.display.get_default_root_window(); - // let mut revert_to_return: i32 = RevertToParent; - // unsafe { XGetInputFocus(self.display, &mut window, &mut revert_to_return) }; - // unsafe { XMapRaised(self.display, window) }; - // window + self.display + .get_input_focus() + .map(|(window, _)| window) + .map_err(|err| err.into()) } /// Brings up an interactive selection GUI. diff --git a/xlib/src/display.rs b/xlib/src/display.rs index 99f8fdb..2673d72 100644 --- a/xlib/src/display.rs +++ b/xlib/src/display.rs @@ -38,6 +38,18 @@ impl Display { }; Ok(window) } + + /// eturns the focus window and the current focus state. + pub fn get_input_focus(&self) -> Result<(Window, i32), X11Error> { + let mut focus_return: x::Window = 0; + let mut revert_to_return = 0; + unsafe { x::XGetInputFocus(self.inner, &mut focus_return, &mut revert_to_return) }; + let window = Window { + display: self.inner, + inner: focus_return, + }; + return Ok((window, revert_to_return)); + } } impl Drop for Display {