Skip to content

Commit 6569c2b

Browse files
Ngo Iok Ui (Wu Yu Wei)lucasfernog
andauthored
refactor(wry): remove a few locks requirements (#2137)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
1 parent 4b0ec01 commit 6569c2b

2 files changed

Lines changed: 23 additions & 33 deletions

File tree

.changes/locks.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-runtime-wry": patch
3+
---
4+
5+
Remove a few locks requirement in tauri-runtime-wry

core/tauri-runtime-wry/src/lib.rs

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,6 @@ use menu::*;
7474
mod mime_type;
7575
use 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>;
8077
type WindowEventHandler = Box<dyn Fn(&WindowEvent) + Send>;
8178
type WindowEventListenersMap = Arc<Mutex<HashMap<Uuid, WindowEventHandler>>>;
8279
type WindowEventListeners = Arc<Mutex<HashMap<WindowId, WindowEventListenersMap>>>;
@@ -682,14 +679,16 @@ pub(crate) enum ClipboardMessage {
682679
ReadText(Sender<Option<String>>),
683680
}
684681

685-
#[derive(Clone)]
686682
pub(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

Comments
 (0)