@@ -225,16 +225,16 @@ impl<T: UserEvent> Context<T> {
225225
226226 self . prepare_window ( window_id) ;
227227
228- let context_ = context . clone ( ) ;
229- send_user_message (
230- & context_ ,
231- Message :: CreateWebview (
228+ // we cannot use `send_user_message` here, see https://github.com/tauri-apps/wry/issues/583
229+ self
230+ . proxy
231+ . send_event ( Message :: CreateWebview (
232232 window_id,
233233 Box :: new ( move |event_loop, web_context| {
234234 create_webview ( window_id, event_loop, web_context, context, pending)
235235 } ) ,
236- ) ,
237- ) ?;
236+ ) )
237+ . map_err ( |_| Error :: FailedToSendMessage ) ?;
238238
239239 let dispatcher = WryDispatcher {
240240 window_id,
@@ -2622,8 +2622,6 @@ fn handle_event_loop<T: UserEvent>(
26222622 #[ allow( unused_mut) ]
26232623 let mut window_id = window_id. unwrap ( ) ; // always Some on MenuBar event
26242624
2625- println ! ( "got {:?}" , window_id) ;
2626-
26272625 #[ cfg( target_os = "macos" ) ]
26282626 {
26292627 // safety: we're only checking to see if the window_id is 0
@@ -2937,6 +2935,8 @@ fn create_webview<T: UserEvent>(
29372935 } ;
29382936 let window = window_builder. inner . build ( event_loop) . unwrap ( ) ;
29392937
2938+ webview_id_map. insert ( window. id ( ) , window_id) ;
2939+
29402940 if window_builder. center {
29412941 let _ = center_window ( & window, window. inner_size ( ) ) ;
29422942 }
@@ -3008,8 +3008,6 @@ fn create_webview<T: UserEvent>(
30083008 . build ( )
30093009 . map_err ( |e| Error :: CreateWebview ( Box :: new ( e) ) ) ?;
30103010
3011- webview_id_map. insert ( webview. window ( ) . id ( ) , window_id) ;
3012-
30133011 #[ cfg( windows) ]
30143012 {
30153013 let controller = webview. controller ( ) ;
@@ -3059,16 +3057,11 @@ fn create_ipc_handler<T: UserEvent>(
30593057 handler : WebviewIpcHandler < T , Wry < T > > ,
30603058) -> Box < dyn Fn ( & Window , String ) + ' static > {
30613059 Box :: new ( move |window, request| {
3060+ let window_id = context. webview_id_map . get ( & window. id ( ) ) ;
30623061 handler (
30633062 DetachedWindow {
30643063 dispatcher : WryDispatcher {
3065- window_id : * context
3066- . webview_id_map
3067- . 0
3068- . lock ( )
3069- . unwrap ( )
3070- . get ( & window. id ( ) )
3071- . unwrap ( ) ,
3064+ window_id,
30723065 context : context. clone ( ) ,
30733066 } ,
30743067 label : label. clone ( ) ,
0 commit comments