@@ -88,7 +88,7 @@ pub use wry::application::platform::macos::{
8888use std:: {
8989 collections:: {
9090 hash_map:: Entry :: { Occupied , Vacant } ,
91- HashMap ,
91+ HashMap , HashSet ,
9292 } ,
9393 fmt,
9494 fs:: read,
@@ -555,7 +555,6 @@ impl<'a> From<&WryWindowEvent<'a>> for WindowEventWrapper {
555555 WryWindowEvent :: Moved ( position) => {
556556 WindowEvent :: Moved ( PhysicalPositionWrapper ( * position) . into ( ) )
557557 }
558- WryWindowEvent :: CloseRequested => WindowEvent :: CloseRequested ,
559558 WryWindowEvent :: Destroyed => WindowEvent :: Destroyed ,
560559 WryWindowEvent :: ScaleFactorChanged {
561560 scale_factor,
@@ -1213,6 +1212,7 @@ impl Dispatch for WryDispatcher {
12131212 let ( tx, rx) = channel ( ) ;
12141213 let label = pending. label . clone ( ) ;
12151214 let menu_ids = pending. menu_ids . clone ( ) ;
1215+ let js_event_listeners = pending. js_event_listeners . clone ( ) ;
12161216 let context = self . context . clone ( ) ;
12171217
12181218 send_user_message (
@@ -1234,6 +1234,7 @@ impl Dispatch for WryDispatcher {
12341234 label,
12351235 dispatcher,
12361236 menu_ids,
1237+ js_event_listeners,
12371238 } )
12381239 }
12391240
@@ -1521,6 +1522,7 @@ impl RuntimeHandle for WryHandle {
15211522 let ( tx, rx) = channel ( ) ;
15221523 let label = pending. label . clone ( ) ;
15231524 let menu_ids = pending. menu_ids . clone ( ) ;
1525+ let js_event_listeners = pending. js_event_listeners . clone ( ) ;
15241526 let context = self . context . clone ( ) ;
15251527 send_user_message (
15261528 & self . context ,
@@ -1541,6 +1543,7 @@ impl RuntimeHandle for WryHandle {
15411543 label,
15421544 dispatcher,
15431545 menu_ids,
1546+ js_event_listeners,
15441547 } )
15451548 }
15461549
@@ -1649,6 +1652,7 @@ impl Runtime for Wry {
16491652 fn create_window ( & self , pending : PendingWindow < Self > ) -> Result < DetachedWindow < Self > > {
16501653 let label = pending. label . clone ( ) ;
16511654 let menu_ids = pending. menu_ids . clone ( ) ;
1655+ let js_event_listeners = pending. js_event_listeners . clone ( ) ;
16521656 let proxy = self . event_loop . create_proxy ( ) ;
16531657 let webview = create_webview (
16541658 & self . event_loop ,
@@ -1738,6 +1742,7 @@ impl Runtime for Wry {
17381742 label,
17391743 dispatcher,
17401744 menu_ids,
1745+ js_event_listeners,
17411746 } )
17421747 }
17431748
@@ -2356,6 +2361,20 @@ fn handle_event_loop(
23562361 if let Some ( w) = windows_guard. get ( & window_id) {
23572362 let label = w. label . clone ( ) ;
23582363 drop ( windows_guard) ;
2364+ for handler in window_event_listeners
2365+ . lock ( )
2366+ . unwrap ( )
2367+ . get ( & window_id)
2368+ . unwrap ( )
2369+ . lock ( )
2370+ . unwrap ( )
2371+ . values ( )
2372+ {
2373+ handler ( & WindowEvent :: CloseRequested {
2374+ label : label. clone ( ) ,
2375+ signal_tx : tx. clone ( ) ,
2376+ } ) ;
2377+ }
23592378 callback ( RunEvent :: CloseRequested {
23602379 label,
23612380 signal_tx : tx,
@@ -2534,6 +2553,7 @@ fn create_webview(
25342553 label,
25352554 url,
25362555 menu_ids,
2556+ js_event_listeners,
25372557 ..
25382558 } = pending;
25392559
@@ -2573,6 +2593,7 @@ fn create_webview(
25732593 context. clone ( ) ,
25742594 label. clone ( ) ,
25752595 menu_ids. clone ( ) ,
2596+ js_event_listeners. clone ( ) ,
25762597 handler,
25772598 ) ) ;
25782599 }
@@ -2581,6 +2602,7 @@ fn create_webview(
25812602 context,
25822603 label. clone ( ) ,
25832604 menu_ids,
2605+ js_event_listeners,
25842606 handler,
25852607 ) ) ;
25862608 }
@@ -2637,6 +2659,7 @@ fn create_rpc_handler(
26372659 context : Context ,
26382660 label : String ,
26392661 menu_ids : Arc < Mutex < HashMap < MenuHash , MenuId > > > ,
2662+ js_event_listeners : Arc < Mutex < HashMap < String , HashSet < u64 > > > > ,
26402663 handler : WebviewRpcHandler < Wry > ,
26412664) -> Box < dyn Fn ( & Window , WryRpcRequest ) -> Option < RpcResponse > + ' static > {
26422665 Box :: new ( move |window, request| {
@@ -2648,6 +2671,7 @@ fn create_rpc_handler(
26482671 } ,
26492672 label : label. clone ( ) ,
26502673 menu_ids : menu_ids. clone ( ) ,
2674+ js_event_listeners : js_event_listeners. clone ( ) ,
26512675 } ,
26522676 RpcRequestWrapper ( request) . into ( ) ,
26532677 ) ;
@@ -2660,6 +2684,7 @@ fn create_file_drop_handler(
26602684 context : Context ,
26612685 label : String ,
26622686 menu_ids : Arc < Mutex < HashMap < MenuHash , MenuId > > > ,
2687+ js_event_listeners : Arc < Mutex < HashMap < String , HashSet < u64 > > > > ,
26632688 handler : FileDropHandler < Wry > ,
26642689) -> Box < dyn Fn ( & Window , WryFileDropEvent ) -> bool + ' static > {
26652690 Box :: new ( move |window, event| {
@@ -2672,6 +2697,7 @@ fn create_file_drop_handler(
26722697 } ,
26732698 label : label. clone ( ) ,
26742699 menu_ids : menu_ids. clone ( ) ,
2700+ js_event_listeners : js_event_listeners. clone ( ) ,
26752701 } ,
26762702 )
26772703 } )
0 commit comments