@@ -74,9 +74,6 @@ use menu::*;
7474mod mime_type;
7575use mime_type:: MimeType ;
7676
77- type MainTask = Arc < Mutex < Option < Box < dyn FnOnce ( ) + Send > > > > ;
78- type CreateWebviewHandler =
79- Box < dyn FnOnce ( & EventLoopWindowTarget < Message > ) -> Result < WebviewWrapper > + Send > ;
8077type WindowEventHandler = Box < dyn Fn ( & WindowEvent ) + Send > ;
8178type WindowEventListenersMap = Arc < Mutex < HashMap < Uuid , WindowEventHandler > > > ;
8279type WindowEventListeners = Arc < Mutex < HashMap < WindowId , WindowEventListenersMap > > > ;
@@ -682,14 +679,16 @@ pub(crate) enum ClipboardMessage {
682679 ReadText ( Sender < Option < String > > ) ,
683680}
684681
685- #[ derive( Clone ) ]
686682pub ( crate ) enum Message {
687- Task ( MainTask ) ,
683+ Task ( Box < dyn FnOnce ( ) + Send > ) ,
688684 Window ( WindowId , WindowMessage ) ,
689685 Webview ( WindowId , WebviewMessage ) ,
690686 #[ cfg( feature = "system-tray" ) ]
691687 Tray ( TrayMessage ) ,
692- CreateWebview ( Arc < Mutex < Option < CreateWebviewHandler > > > , Sender < WindowId > ) ,
688+ CreateWebview (
689+ Box < dyn FnOnce ( & EventLoopWindowTarget < Message > ) -> Result < WebviewWrapper > + Send > ,
690+ Sender < WindowId > ,
691+ ) ,
693692 GlobalShortcut ( GlobalShortcutMessage ) ,
694693 Clipboard ( ClipboardMessage ) ,
695694}
@@ -719,7 +718,7 @@ impl Dispatch for WryDispatcher {
719718 self
720719 . context
721720 . proxy
722- . send_event ( Message :: Task ( Arc :: new ( Mutex :: new ( Some ( Box :: new ( f) ) ) ) ) )
721+ . send_event ( Message :: Task ( Box :: new ( f) ) )
723722 . map_err ( |_| Error :: FailedToSendMessage )
724723 }
725724
@@ -870,9 +869,7 @@ impl Dispatch for WryDispatcher {
870869 . context
871870 . proxy
872871 . send_event ( Message :: CreateWebview (
873- Arc :: new ( Mutex :: new ( Some ( Box :: new ( move |event_loop| {
874- create_webview ( event_loop, context, pending)
875- } ) ) ) ) ,
872+ Box :: new ( move |event_loop| create_webview ( event_loop, context, pending) ) ,
876873 tx,
877874 ) )
878875 . map_err ( |_| Error :: FailedToSendMessage ) ?;
@@ -1176,9 +1173,7 @@ impl RuntimeHandle for WryHandle {
11761173 . dispatcher_context
11771174 . proxy
11781175 . send_event ( Message :: CreateWebview (
1179- Arc :: new ( Mutex :: new ( Some ( Box :: new ( move |event_loop| {
1180- create_webview ( event_loop, dispatcher_context, pending)
1181- } ) ) ) ) ,
1176+ Box :: new ( move |event_loop| create_webview ( event_loop, dispatcher_context, pending) ) ,
11821177 tx,
11831178 ) )
11841179 . map_err ( |_| Error :: FailedToSendMessage ) ?;
@@ -1549,11 +1544,7 @@ fn handle_event_loop(
15491544 }
15501545 }
15511546 Event :: UserEvent ( message) => match message {
1552- Message :: Task ( task) => {
1553- if let Some ( task) = task. lock ( ) . unwrap ( ) . take ( ) {
1554- task ( ) ;
1555- }
1556- }
1547+ Message :: Task ( task) => task ( ) ,
15571548 Message :: Window ( id, window_message) => {
15581549 if let Some ( webview) = webviews. get_mut ( & id) {
15591550 let window = webview. inner . window ( ) ;
@@ -1713,22 +1704,16 @@ fn handle_event_loop(
17131704 }
17141705 }
17151706 }
1716- Message :: CreateWebview ( handler, sender) => {
1717- let handler = {
1718- let mut lock = handler. lock ( ) . expect ( "poisoned create webview handler" ) ;
1719- std:: mem:: take ( & mut * lock) . unwrap ( )
1720- } ;
1721- match handler ( event_loop) {
1722- Ok ( webview) => {
1723- let window_id = webview. inner . window ( ) . id ( ) ;
1724- webviews. insert ( window_id, webview) ;
1725- sender. send ( window_id) . unwrap ( ) ;
1726- }
1727- Err ( e) => {
1728- eprintln ! ( "{}" , e) ;
1729- }
1707+ Message :: CreateWebview ( handler, sender) => match handler ( event_loop) {
1708+ Ok ( webview) => {
1709+ let window_id = webview. inner . window ( ) . id ( ) ;
1710+ webviews. insert ( window_id, webview) ;
1711+ sender. send ( window_id) . unwrap ( ) ;
17301712 }
1731- }
1713+ Err ( e) => {
1714+ eprintln ! ( "{}" , e) ;
1715+ }
1716+ } ,
17321717 #[ cfg( feature = "system-tray" ) ]
17331718 Message :: Tray ( tray_message) => match tray_message {
17341719 TrayMessage :: UpdateItem ( menu_id, update) => {
0 commit comments