From 65a54706f5477c96b029effb6adcec809494d596 Mon Sep 17 00:00:00 2001 From: may Date: Sun, 29 Sep 2024 22:44:27 +0200 Subject: [PATCH] set cursor shape for resize grabs --- src/shell/layout/floating/grabs/resize.rs | 26 ++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/shell/layout/floating/grabs/resize.rs b/src/shell/layout/floating/grabs/resize.rs index e0ee2911..5cbd26b4 100644 --- a/src/shell/layout/floating/grabs/resize.rs +++ b/src/shell/layout/floating/grabs/resize.rs @@ -3,6 +3,7 @@ use std::sync::atomic::{AtomicBool, Ordering}; use crate::{ + backend::render::cursor::CursorState, shell::{ element::CosmicMapped, focus::target::PointerFocusTarget, @@ -15,7 +16,7 @@ use smithay::{ desktop::{space::SpaceElement, WindowSurface}, input::{ pointer::{ - AxisFrame, ButtonEvent, GestureHoldBeginEvent, GestureHoldEndEvent, + AxisFrame, ButtonEvent, CursorIcon, GestureHoldBeginEvent, GestureHoldEndEvent, GesturePinchBeginEvent, GesturePinchEndEvent, GesturePinchUpdateEvent, GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent, GrabStartData as PointerGrabStartData, MotionEvent, PointerGrab, PointerInnerHandle, @@ -390,6 +391,22 @@ impl ResizeSurfaceGrab { .0 .store(true, Ordering::SeqCst); + let shape = match edges { + ResizeEdge::TOP_LEFT => Some(CursorIcon::NwResize), + ResizeEdge::TOP_RIGHT => Some(CursorIcon::NeResize), + ResizeEdge::BOTTOM_LEFT => Some(CursorIcon::SwResize), + ResizeEdge::BOTTOM_RIGHT => Some(CursorIcon::SeResize), + ResizeEdge::TOP => Some(CursorIcon::NResize), + ResizeEdge::RIGHT => Some(CursorIcon::EResize), + ResizeEdge::BOTTOM => Some(CursorIcon::SResize), + ResizeEdge::LEFT => Some(CursorIcon::WResize), + _ => None, + }; + if let Some(shape) = shape { + let cursor_state = seat.user_data().get::().unwrap(); + cursor_state.lock().unwrap().set_shape(shape); + } + ResizeSurfaceGrab { start_data, seat: seat.clone(), @@ -524,3 +541,10 @@ impl ResizeSurfaceGrab { } } } + +impl Drop for ResizeSurfaceGrab { + fn drop(&mut self) { + let cursor_state = self.seat.user_data().get::().unwrap(); + cursor_state.lock().unwrap().unset_shape(); + } +}