diff --git a/winit/src/platform_specific/wayland/handlers/seat/pointer.rs b/winit/src/platform_specific/wayland/handlers/seat/pointer.rs index 3f6ae87a..6f3babca 100644 --- a/winit/src/platform_specific/wayland/handlers/seat/pointer.rs +++ b/winit/src/platform_specific/wayland/handlers/seat/pointer.rs @@ -66,6 +66,18 @@ impl PointerHandler for SctkState { *entry = FrameStatus::Ready; } + if let PointerEventKind::Enter { .. } = &e.kind { + self.sctk_events.push(SctkEvent::PointerEvent { + variant: PointerEvent { + surface: e.surface.clone(), + position: e.position, + kind: e.kind.clone(), + }, + ptr_id: pointer.clone(), + seat_id: my_seat.seat.clone(), + }); + } + if let PointerEventKind::Motion { time } = &e.kind { self.sctk_events.push(SctkEvent::PointerEvent { variant: PointerEvent { diff --git a/winit/src/platform_specific/wayland/sctk_event.rs b/winit/src/platform_specific/wayland/sctk_event.rs index b8a5762d..ee190a5a 100755 --- a/winit/src/platform_specific/wayland/sctk_event.rs +++ b/winit/src/platform_specific/wayland/sctk_event.rs @@ -370,14 +370,16 @@ impl SctkEvent { SctkEvent::SeatEvent { .. } => Default::default(), SctkEvent::PointerEvent { variant, .. } => match variant.kind { PointerEventKind::Enter { .. } => { - events.push(( - surface_ids - .get(&variant.surface.id()) - .map(|id| id.inner()), - iced_runtime::core::Event::Mouse( - mouse::Event::CursorEntered, - ), - )); + let id = surface_ids + .get(&variant.surface.id()) + .map(|id| id.inner()); + if let Some(w) = + id.clone().and_then(|id| window_manager.get_mut(id)) + { + w.state.set_logical_cursor_pos( + (variant.position.0, variant.position.1).into(), + ) + } } PointerEventKind::Leave { .. } => events.push(( surface_ids.get(&variant.surface.id()).map(|id| id.inner()),