From be591d2feb6896b6fe4b85e696d500df8a3a95bb Mon Sep 17 00:00:00 2001 From: Jason Tsai Date: Mon, 7 Aug 2023 20:34:16 +0800 Subject: [PATCH] fix(dialog): using AsyncMessageDialog for non linux, closes tauri#7182 (#445) --- .changes/dialog-async-message-dialog.md | 5 +++++ plugins/dialog/src/desktop.rs | 13 +++++++++---- plugins/dialog/src/lib.rs | 4 +++- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 .changes/dialog-async-message-dialog.md diff --git a/.changes/dialog-async-message-dialog.md b/.changes/dialog-async-message-dialog.md new file mode 100644 index 00000000..adfe008b --- /dev/null +++ b/.changes/dialog-async-message-dialog.md @@ -0,0 +1,5 @@ +--- +"dialog": "patch" +--- + +On non-Linux system, use `AsyncMessageDialog` instead of `MessageDialog`. [(tauri#7182)](https://github.com/tauri-apps/tauri/issues/7182) diff --git a/plugins/dialog/src/desktop.rs b/plugins/dialog/src/desktop.rs index 25222f91..4cd02bcd 100644 --- a/plugins/dialog/src/desktop.rs +++ b/plugins/dialog/src/desktop.rs @@ -23,6 +23,11 @@ type FileDialog = rfd::FileDialog; #[cfg(not(target_os = "linux"))] type FileDialog = rfd::AsyncFileDialog; +#[cfg(target_os = "linux")] +type MessageDialog = rfd::MessageDialog; +#[cfg(not(target_os = "linux"))] +type MessageDialog = rfd::AsyncMessageDialog; + pub fn init( app: &AppHandle, _api: PluginApi, @@ -50,7 +55,7 @@ impl Dialog { macro_rules! run_dialog { ($e:expr, $h: ident) => {{ std::thread::spawn(move || { - let response = $e; + let response = tauri::async_runtime::block_on($e); $h(response); }); }}; @@ -136,9 +141,9 @@ impl From> for FileDialog { } } -impl From> for rfd::MessageDialog { +impl From> for MessageDialog { fn from(d: MessageDialogBuilder) -> Self { - let mut dialog = rfd::MessageDialog::new() + let mut dialog = MessageDialog::new() .set_title(&d.title) .set_description(&d.message) .set_level(d.kind.into()); @@ -215,5 +220,5 @@ pub fn show_message_dialog( dialog: MessageDialogBuilder, f: F, ) { - run_dialog!(rfd::MessageDialog::from(dialog).show(), f); + run_dialog!(MessageDialog::from(dialog).show(), f); } diff --git a/plugins/dialog/src/lib.rs b/plugins/dialog/src/lib.rs index 4cf37c01..ba08b645 100644 --- a/plugins/dialog/src/lib.rs +++ b/plugins/dialog/src/lib.rs @@ -209,7 +209,9 @@ impl MessageDialogBuilder { show_message_dialog(self, f) } - //// Shows a message dialog. + /// Shows a message dialog. + /// This is a blocking operation, + /// and should *NOT* be used when running on the main thread context. pub fn blocking_show(self) -> bool { blocking_fn!(self, show) }