File tree Expand file tree Collapse file tree
src/platform_impl/web/event_loop Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -597,10 +597,19 @@ impl ActiveEventLoop {
597597 let canvas = canvas_clone. clone ( ) ;
598598
599599 move |new_size| {
600- let canvas = canvas. borrow ( ) ;
601- canvas. set_current_size ( new_size) ;
602- if canvas. old_size ( ) != new_size {
603- canvas. set_old_size ( new_size) ;
600+ // Release the canvas borrow before sending events, because event
601+ // processing can synchronously re-enter and attempt to borrow_mut
602+ // the canvas (e.g. to update the cursor), which would panic.
603+ let size_changed = {
604+ let canvas = canvas. borrow ( ) ;
605+ canvas. set_current_size ( new_size) ;
606+ let changed = canvas. old_size ( ) != new_size;
607+ if changed {
608+ canvas. set_old_size ( new_size) ;
609+ }
610+ changed
611+ } ;
612+ if size_changed {
604613 runner. send_event ( Event :: WindowEvent {
605614 window_id : RootWindowId ( id) ,
606615 event : WindowEvent :: Resized ( new_size) ,
You can’t perform that action at this time.
0 commit comments