@@ -934,27 +934,37 @@ impl Event for client::wl_touch::Event {
934934 } => {
935935 let mut cmd = CommandBuffer :: new ( ) ;
936936 {
937- let mut s_query = surface. data ( ) . copied ( ) . and_then ( |key| {
937+ let s_entity = surface. data ( ) . copied ( ) ;
938+ let mut s_query = s_entity. and_then ( |key| {
938939 state
939940 . world
940941 . query_one :: < ( & WlSurface , & SurfaceScaleFactor ) > ( key)
941942 . ok ( )
942943 } ) ;
943- let Some ( ( s_surface, s_factor) ) = s_query. as_mut ( ) . and_then ( |q| q. get ( ) ) else {
944- return ;
945- } ;
946-
947- cmd. insert ( target, ( * s_factor, ) ) ;
948- let touch = state. world . get :: < & WlTouch > ( target) . unwrap ( ) ;
949- touch. down ( serial, time, s_surface, id, x * s_factor. 0 , y * s_factor. 0 ) ;
944+ if let Some ( ( s_surface, s_factor) ) = s_query. as_mut ( ) . and_then ( |q| q. get ( ) ) {
945+ cmd. insert_one ( target, * s_factor) ;
946+ let touch = state. world . get :: < & WlTouch > ( target) . unwrap ( ) ;
947+ touch. down ( serial, time, s_surface, id, x * s_factor. 0 , y * s_factor. 0 ) ;
948+ } else if let Some ( & DecorationMarker { parent } ) = surface. data ( ) {
949+ drop ( s_query) ;
950+ let seat = {
951+ let seat =
952+ & * state. world . get :: < & client:: wl_seat:: WlSeat > ( target) . unwrap ( ) ;
953+ seat. clone ( )
954+ } ;
955+ decoration:: handle_pointer_motion ( state, parent, x, y) ;
956+ decoration:: handle_pointer_click ( state, parent, & seat, serial) ;
957+ }
950958 }
951959 cmd. run_on ( & mut state. world ) ;
952960 }
953961 Self :: Motion { time, id, x, y } => {
954- let ( touch, scale) = state
962+ let Ok ( ( touch, scale) ) = state
955963 . world
956964 . query_one_mut :: < ( & WlTouch , & SurfaceScaleFactor ) > ( target)
957- . unwrap ( ) ;
965+ else {
966+ return ;
967+ } ;
958968 touch. motion ( time, id, x * scale. 0 , y * scale. 0 ) ;
959969 }
960970 _ => {
0 commit comments