@@ -33,7 +33,13 @@ pub fn platform(
3333
3434 let _ = app_handle. set_dock_visibility ( false ) ;
3535
36- let panel = main_window. to_panel :: < NsPanel > ( ) . unwrap ( ) ;
36+ let panel = match main_window. to_panel :: < NsPanel > ( ) {
37+ Ok ( panel) => panel,
38+ Err ( error) => {
39+ log:: error!( "[nspanel] failed to convert main window to panel: {}" , error) ;
40+ return ;
41+ }
42+ } ;
3743
3844 panel. set_level ( PanelLevel :: Dock . value ( ) ) ;
3945
@@ -51,38 +57,56 @@ pub fn platform(
5157
5258 let window = main_window. clone ( ) ;
5359 handler. window_did_become_key ( move |_| {
54- let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
55-
56- let _ = window. emit_to ( target, WINDOW_FOCUS_EVENT , true ) ;
60+ let _ = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
61+ let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
62+ let _ = window. emit_to ( target, WINDOW_FOCUS_EVENT , true ) ;
63+ } ) )
64+ . map_err ( |_| {
65+ log:: error!( "[nspanel] panic in window_did_become_key callback" ) ;
66+ } ) ;
5767 } ) ;
5868
5969 let window = main_window. clone ( ) ;
6070 handler. window_did_resign_key ( move |_| {
61- let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
62-
63- let _ = window. emit_to ( target, WINDOW_BLUR_EVENT , true ) ;
71+ let _ = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
72+ let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
73+ let _ = window. emit_to ( target, WINDOW_BLUR_EVENT , true ) ;
74+ } ) )
75+ . map_err ( |_| {
76+ log:: error!( "[nspanel] panic in window_did_resign_key callback" ) ;
77+ } ) ;
6478 } ) ;
6579
6680 let window = main_window. clone ( ) ;
6781 handler. window_did_resize ( move |_| {
68- let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
69-
70- if let Ok ( position) = window. outer_position ( ) {
71- let _ = window. emit_to ( target. clone ( ) , WINDOW_MOVED_EVENT , position) ;
72- }
73-
74- if let Ok ( size) = window. inner_size ( ) {
75- let _ = window. emit_to ( target, WINDOW_RESIZED_EVENT , size) ;
76- }
82+ let _ = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
83+ let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
84+
85+ if let Ok ( position) = window. outer_position ( ) {
86+ let _ = window. emit_to ( target. clone ( ) , WINDOW_MOVED_EVENT , position) ;
87+ }
88+
89+ if let Ok ( size) = window. inner_size ( ) {
90+ let _ = window. emit_to ( target, WINDOW_RESIZED_EVENT , size) ;
91+ }
92+ } ) )
93+ . map_err ( |_| {
94+ log:: error!( "[nspanel] panic in window_did_resize callback" ) ;
95+ } ) ;
7796 } ) ;
7897
7998 let window = main_window. clone ( ) ;
8099 handler. window_did_move ( move |_| {
81- let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
82-
83- if let Ok ( position) = window. outer_position ( ) {
84- let _ = window. emit_to ( target. clone ( ) , WINDOW_MOVED_EVENT , position) ;
85- }
100+ let _ = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
101+ let target = EventTarget :: labeled ( MAIN_WINDOW_LABEL ) ;
102+
103+ if let Ok ( position) = window. outer_position ( ) {
104+ let _ = window. emit_to ( target. clone ( ) , WINDOW_MOVED_EVENT , position) ;
105+ }
106+ } ) )
107+ . map_err ( |_| {
108+ log:: error!( "[nspanel] panic in window_did_move callback" ) ;
109+ } ) ;
86110 } ) ;
87111
88112 panel. set_event_handler ( Some ( handler. as_ref ( ) ) ) ;
0 commit comments