use xcb::x::{EnterNotifyEvent, FocusInEvent, NotifyDetail, NotifyMode}; use crate::{error::Result, WM}; impl WM<'_> { /// When a new window is entered, focus it. pub fn handle_enter_notify(&mut self, e: &EnterNotifyEvent) -> Result<()> { if (e.mode() != NotifyMode::Normal || e.detail() == NotifyDetail::Inferior) && e.event() != self.conn.root() { return Ok(()); } if let Some((mon, pos)) = self.clients.find_client_pos(e.event()) { self.clients.refocus(&self.conn, mon, pos); self.conn.flush()?; } Ok(()) } /// When a new window requests focus, focus it. pub fn handle_focus_in(&mut self, e: &FocusInEvent) -> Result<()> { if !self.clients.is_focused(e.event()) { if let Some((mon, pos)) = self.clients.find_client_pos(e.event()) { self.clients.refocus(&self.conn, mon, pos); self.conn.flush()?; } } Ok(()) } }