From 322f68f3d6fa63275a07fd9596b0e8ee26276e8a Mon Sep 17 00:00:00 2001 From: Joel Selvaraj Date: Wed, 10 Apr 2024 14:59:33 -0500 Subject: [PATCH] linux: wayland: fix cursor set_icon (#10374) Release Notes: - Partially (Wayland implementation) Fixed [#10124](https://github.com/zed-industries/zed/issues/10124)). The recent refactor of the linux gpui implementation (https://github.com/zed-industries/zed/pull/10227) broke the wayland cursor update logic by setting the cursor icon as `None`. Fix it by setting the `cursor_icon_name`. --- crates/gpui/src/platform/linux/wayland/client.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/gpui/src/platform/linux/wayland/client.rs b/crates/gpui/src/platform/linux/wayland/client.rs index 2b6e1cbfba673bbf32bf95f534d6993437445ae5..40cf197628bc148dc34a9de36727103c071a2ef5 100644 --- a/crates/gpui/src/platform/linux/wayland/client.rs +++ b/crates/gpui/src/platform/linux/wayland/client.rs @@ -701,6 +701,7 @@ impl Dispatch for WaylandClient { qh: &QueueHandle, ) { let mut state = client.0.borrow_mut(); + let cursor_icon_name = state.cursor_icon_name.clone(); match event { wl_pointer::Event::Enter { @@ -716,7 +717,9 @@ impl Dispatch for WaylandClient { state.enter_token = Some(()); state.mouse_focused_window = Some(window.clone()); state.cursor.set_serial_id(serial); - state.cursor.set_icon(&wl_pointer, None); + state + .cursor + .set_icon(&wl_pointer, Some(cursor_icon_name.as_str())); drop(state); window.set_focused(true); } @@ -747,7 +750,9 @@ impl Dispatch for WaylandClient { return; } state.mouse_location = Some(point(px(surface_x as f32), px(surface_y as f32))); - state.cursor.set_icon(&wl_pointer, None); + state + .cursor + .set_icon(&wl_pointer, Some(cursor_icon_name.as_str())); if let Some(window) = state.mouse_focused_window.clone() { let input = PlatformInput::MouseMove(MouseMoveEvent {