@@ -14,7 +14,7 @@ use tauri_runtime::{
1414 webview:: { WebviewIpcHandler , WindowBuilder , WindowBuilderBase } ,
1515 window:: {
1616 dpi:: { LogicalPosition , LogicalSize , PhysicalPosition , PhysicalSize , Position , Size } ,
17- DetachedWindow , FileDropEvent , JsEventListenerKey , PendingWindow , WindowEvent ,
17+ CursorIcon , DetachedWindow , FileDropEvent , JsEventListenerKey , PendingWindow , WindowEvent ,
1818 } ,
1919 ClipboardManager , Dispatch , Error , EventLoopProxy , ExitRequestedEventAction ,
2020 GlobalShortcutManager , Result , RunEvent , RunIteration , Runtime , RuntimeHandle , UserAttentionType ,
@@ -63,7 +63,7 @@ use wry::{
6363 } ,
6464 monitor:: MonitorHandle ,
6565 window:: {
66- Fullscreen , Icon as WryWindowIcon , Theme as WryTheme ,
66+ CursorIcon as WryCursorIcon , Fullscreen , Icon as WryWindowIcon , Theme as WryTheme ,
6767 UserAttentionType as WryUserAttentionType ,
6868 } ,
6969 } ,
@@ -752,7 +752,7 @@ impl From<Position> for PositionWrapper {
752752pub struct UserAttentionTypeWrapper ( WryUserAttentionType ) ;
753753
754754impl From < UserAttentionType > for UserAttentionTypeWrapper {
755- fn from ( request_type : UserAttentionType ) -> UserAttentionTypeWrapper {
755+ fn from ( request_type : UserAttentionType ) -> Self {
756756 let o = match request_type {
757757 UserAttentionType :: Critical => WryUserAttentionType :: Critical ,
758758 UserAttentionType :: Informational => WryUserAttentionType :: Informational ,
@@ -761,6 +761,54 @@ impl From<UserAttentionType> for UserAttentionTypeWrapper {
761761 }
762762}
763763
764+ #[ derive( Debug ) ]
765+ pub struct CursorIconWrapper ( WryCursorIcon ) ;
766+
767+ impl From < CursorIcon > for CursorIconWrapper {
768+ fn from ( icon : CursorIcon ) -> Self {
769+ use CursorIcon :: * ;
770+ let i = match icon {
771+ Default => WryCursorIcon :: Default ,
772+ Crosshair => WryCursorIcon :: Crosshair ,
773+ Hand => WryCursorIcon :: Hand ,
774+ Arrow => WryCursorIcon :: Arrow ,
775+ Move => WryCursorIcon :: Move ,
776+ Text => WryCursorIcon :: Text ,
777+ Wait => WryCursorIcon :: Wait ,
778+ Help => WryCursorIcon :: Help ,
779+ Progress => WryCursorIcon :: Progress ,
780+ NotAllowed => WryCursorIcon :: NotAllowed ,
781+ ContextMenu => WryCursorIcon :: ContextMenu ,
782+ Cell => WryCursorIcon :: Cell ,
783+ VerticalText => WryCursorIcon :: VerticalText ,
784+ Alias => WryCursorIcon :: Alias ,
785+ Copy => WryCursorIcon :: Copy ,
786+ NoDrop => WryCursorIcon :: NoDrop ,
787+ Grab => WryCursorIcon :: Grab ,
788+ Grabbing => WryCursorIcon :: Grabbing ,
789+ AllScroll => WryCursorIcon :: AllScroll ,
790+ ZoomIn => WryCursorIcon :: ZoomIn ,
791+ ZoomOut => WryCursorIcon :: ZoomOut ,
792+ EResize => WryCursorIcon :: EResize ,
793+ NResize => WryCursorIcon :: NResize ,
794+ NeResize => WryCursorIcon :: NeResize ,
795+ NwResize => WryCursorIcon :: NwResize ,
796+ SResize => WryCursorIcon :: SResize ,
797+ SeResize => WryCursorIcon :: SeResize ,
798+ SwResize => WryCursorIcon :: SwResize ,
799+ WResize => WryCursorIcon :: WResize ,
800+ EwResize => WryCursorIcon :: EwResize ,
801+ NsResize => WryCursorIcon :: NsResize ,
802+ NeswResize => WryCursorIcon :: NeswResize ,
803+ NwseResize => WryCursorIcon :: NwseResize ,
804+ ColResize => WryCursorIcon :: ColResize ,
805+ RowResize => WryCursorIcon :: RowResize ,
806+ _ => WryCursorIcon :: Default ,
807+ } ;
808+ Self ( i)
809+ }
810+ }
811+
764812#[ derive( Debug , Clone , Default ) ]
765813pub struct WindowBuilderWrapper {
766814 inner : WryWindowBuilder ,
@@ -1079,6 +1127,10 @@ pub enum WindowMessage {
10791127 SetFocus ,
10801128 SetIcon ( WryWindowIcon ) ,
10811129 SetSkipTaskbar ( bool ) ,
1130+ SetCursorGrab ( bool ) ,
1131+ SetCursorVisible ( bool ) ,
1132+ SetCursorIcon ( CursorIcon ) ,
1133+ SetCursorPosition ( Position ) ,
10821134 DragWindow ,
10831135 UpdateMenuItem ( u16 , MenuUpdate ) ,
10841136 RequestRedraw ,
@@ -1505,6 +1557,37 @@ impl<T: UserEvent> Dispatch<T> for WryDispatcher<T> {
15051557 )
15061558 }
15071559
1560+ fn set_cursor_grab ( & self , grab : bool ) -> crate :: Result < ( ) > {
1561+ send_user_message (
1562+ & self . context ,
1563+ Message :: Window ( self . window_id , WindowMessage :: SetCursorGrab ( grab) ) ,
1564+ )
1565+ }
1566+
1567+ fn set_cursor_visible ( & self , visible : bool ) -> crate :: Result < ( ) > {
1568+ send_user_message (
1569+ & self . context ,
1570+ Message :: Window ( self . window_id , WindowMessage :: SetCursorVisible ( visible) ) ,
1571+ )
1572+ }
1573+
1574+ fn set_cursor_icon ( & self , icon : CursorIcon ) -> crate :: Result < ( ) > {
1575+ send_user_message (
1576+ & self . context ,
1577+ Message :: Window ( self . window_id , WindowMessage :: SetCursorIcon ( icon) ) ,
1578+ )
1579+ }
1580+
1581+ fn set_cursor_position < Pos : Into < Position > > ( & self , position : Pos ) -> crate :: Result < ( ) > {
1582+ send_user_message (
1583+ & self . context ,
1584+ Message :: Window (
1585+ self . window_id ,
1586+ WindowMessage :: SetCursorPosition ( position. into ( ) ) ,
1587+ ) ,
1588+ )
1589+ }
1590+
15081591 fn start_dragging ( & self ) -> Result < ( ) > {
15091592 send_user_message (
15101593 & self . context ,
@@ -2176,9 +2259,26 @@ fn handle_user_message<T: UserEvent>(
21762259 WindowMessage :: SetIcon ( icon) => {
21772260 window. set_window_icon ( Some ( icon) ) ;
21782261 }
2179- WindowMessage :: SetSkipTaskbar ( _skip) => {
2262+ #[ allow( unused_variables) ]
2263+ WindowMessage :: SetSkipTaskbar ( skip) => {
21802264 #[ cfg( any( windows, target_os = "linux" ) ) ]
2181- window. set_skip_taskbar ( _skip) ;
2265+ window. set_skip_taskbar ( skip) ;
2266+ }
2267+ #[ allow( unused_variables) ]
2268+ WindowMessage :: SetCursorGrab ( grab) => {
2269+ #[ cfg( any( windows, target_os = "macos" ) ) ]
2270+ let _ = window. set_cursor_grab ( grab) ;
2271+ }
2272+ WindowMessage :: SetCursorVisible ( visible) => {
2273+ window. set_cursor_visible ( visible) ;
2274+ }
2275+ WindowMessage :: SetCursorIcon ( icon) => {
2276+ window. set_cursor_icon ( CursorIconWrapper :: from ( icon) . 0 ) ;
2277+ }
2278+ #[ allow( unused_variables) ]
2279+ WindowMessage :: SetCursorPosition ( position) => {
2280+ #[ cfg( any( windows, target_os = "macos" ) ) ]
2281+ let _ = window. set_cursor_position ( PositionWrapper :: from ( position) . 0 ) ;
21822282 }
21832283 WindowMessage :: DragWindow => {
21842284 let _ = window. drag_window ( ) ;
0 commit comments