diff --git a/src/backend/x11/application.rs b/src/backend/x11/application.rs index b3c8a845..6ba2fd7c 100644 --- a/src/backend/x11/application.rs +++ b/src/backend/x11/application.rs @@ -533,6 +533,12 @@ impl Application { .context("MOTION_NOTIFY - failed to get window")?; w.handle_motion_notify(ev)?; } + Event::LeaveNotify(ev) => { + let w = self + .window(ev.event) + .context("LEAVE_NOTIFY - failed to get window")?; + w.handle_leave_notify(ev)?; + } Event::ClientMessage(ev) => { let w = self .window(ev.window) diff --git a/src/backend/x11/window.rs b/src/backend/x11/window.rs index adb0582c..6fb37b3c 100644 --- a/src/backend/x11/window.rs +++ b/src/backend/x11/window.rs @@ -240,7 +240,8 @@ impl WindowBuilder { | EventMask::BUTTON_PRESS | EventMask::BUTTON_RELEASE | EventMask::POINTER_MOTION - | EventMask::FOCUS_CHANGE, + | EventMask::FOCUS_CHANGE + | EventMask::LEAVE_WINDOW, ); if transparent { let colormap = conn.generate_id()?; @@ -878,6 +879,14 @@ impl Window { Ok(()) } + pub fn handle_leave_notify( + &self, + _leave_notify: &xproto::LeaveNotifyEvent, + ) -> Result<(), Error> { + self.with_handler(|h| h.mouse_leave()); + Ok(()) + } + pub fn handle_got_focus(&self) { self.with_handler(|h| h.got_focus()); }