Skip to content

Commit f101687

Browse files
kjaroshevilpie
authored andcommitted
desktop: Use async dialogs when saving files
Since we're using tokio we can easily migrate save dialogs to async ones, that do not require another thread to be handled.
1 parent d5f06ac commit f101687

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

desktop/src/gui.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use egui::*;
2424
use fluent_templates::fluent_bundle::FluentValue;
2525
use fluent_templates::{static_loader, Loader};
2626
use menu_bar::MenuBar;
27-
use rfd::FileDialog;
27+
use rfd::AsyncFileDialog;
2828
use ruffle_core::debug_ui::Message as DebugMessage;
2929
use ruffle_core::{Player, PlayerEvent};
3030
use std::collections::HashMap;
@@ -170,19 +170,23 @@ impl RuffleGui {
170170
}
171171
}
172172
for item in player.debug_ui().items_to_save() {
173-
std::thread::spawn(move || {
174-
if let Some(path) = FileDialog::new()
175-
.set_file_name(&item.suggested_name)
176-
.save_file()
177-
{
178-
if let Err(e) = fs::write(&path, item.data) {
173+
let dialog = AsyncFileDialog::new().set_file_name(&item.suggested_name);
174+
let picker = self.dialogs.file_picker();
175+
let result = picker.show_dialog(dialog, |d| d.save_file());
176+
if let Some(result) = result {
177+
tokio::spawn(async move {
178+
let Some(handle) = result.await else {
179+
return;
180+
};
181+
let path = handle.path();
182+
if let Err(e) = fs::write(path, item.data) {
179183
tracing::error!(
180184
"Couldn't save {} to {path:?}: {e}",
181185
item.suggested_name,
182186
);
183187
}
184-
}
185-
});
188+
});
189+
}
186190
}
187191

188192
if let Some(context_menu) = &mut self.context_menu {

0 commit comments

Comments
 (0)