From 56256a1340b771c71a5cfdc881525807edc3fcd2 Mon Sep 17 00:00:00 2001 From: En-En <39373446+En-En-Code@users.noreply.github.com> Date: Wed, 5 Nov 2025 13:30:30 +0000 Subject: [PATCH] refactor: make `handle_pending_enter` fn function --- src/server/event.rs | 66 ++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/server/event.rs b/src/server/event.rs index cb304ef..215a4f3 100644 --- a/src/server/event.rs +++ b/src/server/event.rs @@ -460,39 +460,45 @@ impl Event for client::wl_pointer::Event { // Niri). Other compositors do not run into this problem because they appear to not send // wl_pointer.enter until the user actually moves the mouse in the popup. - let handle_pending_enter = |target: Entity, state: &mut ServerState, event_str: &str| loop { - let Ok(pe) = state.world.get::<&PendingEnter>(target) else { - return true; - }; - let PendingEnter(client::wl_pointer::Event::Enter { - serial, - surface, - surface_x, - surface_y, - }) = pe.deref() - else { - unreachable!(); - }; - if surface - .data() - .copied() - .is_some_and(|key| state.world.contains(key)) - { - trace!("resending enter ({serial}) before {}", event_str); - let enter_event = client::wl_pointer::Event::Enter { - serial: *serial, - surface: surface.clone(), - surface_x: *surface_x, - surface_y: *surface_y, + fn handle_pending_enter( + target: Entity, + state: &mut ServerState, + event_str: &str, + ) -> bool { + loop { + let Ok(pe) = state.world.get::<&PendingEnter>(target) else { + return true; }; + let PendingEnter(client::wl_pointer::Event::Enter { + serial, + surface, + surface_x, + surface_y, + }) = pe.deref() + else { + unreachable!(); + }; + if surface + .data() + .copied() + .is_some_and(|key| state.world.contains(key)) + { + trace!("resending enter ({serial}) before {}", event_str); + let enter_event = client::wl_pointer::Event::Enter { + serial: *serial, + surface: surface.clone(), + surface_x: *surface_x, + surface_y: *surface_y, + }; - drop(pe); - Self::handle(enter_event, target, state); - } else { - warn!("could not move pointer to surface: stale surface"); - return false; + drop(pe); + Event::handle(enter_event, target, state); + } else { + warn!("could not move pointer to surface: stale surface"); + return false; + } } - }; + } match self { Self::Enter {