@@ -446,6 +446,7 @@ where
446446 SctkEvent :: WindowEvent { variant, id } => match variant {
447447 crate :: sctk_event:: WindowEventVariant :: Created ( id, native_id) => {
448448 surface_ids. insert ( id, SurfaceIdWrapper :: Window ( native_id) ) ;
449+ states. insert ( native_id, State :: new ( & application, SurfaceIdWrapper :: Window ( native_id) ) ) ;
449450 }
450451 crate :: sctk_event:: WindowEventVariant :: Close => {
451452 if let Some ( surface_id) = surface_ids. remove ( & id. id ( ) ) {
@@ -485,8 +486,9 @@ where
485486 wrapper
486487 } ) ;
487488 if first {
488- let state = State :: new ( & application, * id) ;
489-
489+ let Some ( state) = states. get ( & id. inner ( ) ) else {
490+ continue ;
491+ } ;
490492 let user_interface = build_user_interface (
491493 & application,
492494 user_interface:: Cache :: default ( ) ,
@@ -498,7 +500,6 @@ where
498500 & mut auto_size_surfaces,
499501 & mut ev_proxy
500502 ) ;
501- states. insert ( id. inner ( ) , state) ;
502503 interfaces. insert ( id. inner ( ) , user_interface) ;
503504 }
504505 if let Some ( state) = states. get_mut ( & id. inner ( ) ) {
@@ -518,6 +519,8 @@ where
518519 SctkEvent :: LayerSurfaceEvent { variant, id } => match variant {
519520 LayerSurfaceEventVariant :: Created ( id, native_id) => {
520521 surface_ids. insert ( id, SurfaceIdWrapper :: LayerSurface ( native_id) ) ;
522+ states. insert ( native_id, State :: new ( & application, SurfaceIdWrapper :: LayerSurface ( native_id) ) ) ;
523+
521524 }
522525 LayerSurfaceEventVariant :: Done => {
523526 if let Some ( surface_id) = surface_ids. remove ( & id. id ( ) ) {
@@ -552,8 +555,9 @@ where
552555 wrapper
553556 } ) ;
554557 if first {
555- let state = State :: new ( & application, * id) ;
556-
558+ let Some ( state) = states. get ( & id. inner ( ) ) else {
559+ continue ;
560+ } ;
557561 let user_interface = build_user_interface (
558562 & application,
559563 user_interface:: Cache :: default ( ) ,
@@ -565,7 +569,6 @@ where
565569 & mut auto_size_surfaces,
566570 & mut ev_proxy
567571 ) ;
568- states. insert ( id. inner ( ) , state) ;
569572 interfaces. insert ( id. inner ( ) , user_interface) ;
570573 }
571574 if let Some ( state) = states. get_mut ( & id. inner ( ) ) {
@@ -593,6 +596,8 @@ where
593596 } => match variant {
594597 PopupEventVariant :: Created ( id, native_id) => {
595598 surface_ids. insert ( id, SurfaceIdWrapper :: Popup ( native_id) ) ;
599+ states. insert ( native_id, State :: new ( & application, SurfaceIdWrapper :: Popup ( native_id) ) ) ;
600+
596601 }
597602 PopupEventVariant :: Done => {
598603 if let Some ( surface_id) = surface_ids. remove ( & id. id ( ) ) {
@@ -618,8 +623,9 @@ where
618623 wrapper
619624 } ) ;
620625 if first {
621- let state = State :: new ( & application, * id) ;
622-
626+ let Some ( state) = states. get ( & id. inner ( ) ) else {
627+ continue ;
628+ } ;
623629 let user_interface = build_user_interface (
624630 & application,
625631 user_interface:: Cache :: default ( ) ,
@@ -631,7 +637,6 @@ where
631637 & mut auto_size_surfaces,
632638 & mut ev_proxy
633639 ) ;
634- states. insert ( id. inner ( ) , state) ;
635640 interfaces. insert ( id. inner ( ) , user_interface) ;
636641 }
637642 if let Some ( state) = states. get_mut ( & id. inner ( ) ) {
@@ -930,9 +935,10 @@ where
930935 has_events || !native_events. is_empty ( ) ;
931936
932937 let ( interface_state, statuses) = {
933- let user_interface = interfaces
934- . get_mut ( & surface_id. inner ( ) )
935- . unwrap ( ) ;
938+ let Some ( user_interface) = interfaces
939+ . get_mut ( & surface_id. inner ( ) ) else {
940+ continue ;
941+ } ;
936942 user_interface. update (
937943 native_events. as_slice ( ) ,
938944 cursor_position,
0 commit comments