blocking_dialog/linux/
save_file.rs1use crate::{BlockingDialogError, BlockingSaveFileDialog};
5use native_dialog::DialogBuilder;
6use raw_window_handle::HasWindowHandle;
7use std::path::PathBuf;
8
9impl<'a, W: HasWindowHandle> BlockingSaveFileDialog<'a, W> {
10 pub fn show(&self) -> Result<Option<PathBuf>, BlockingDialogError> {
11 let mut dialog = DialogBuilder::file()
12 .set_title(self.title)
13 .set_owner(&self.window);
14
15 if let Some(default_filename) = self.default_filename {
16 dialog = dialog.set_filename(default_filename);
17 }
18
19 for filter in self.filter {
20 dialog = dialog.add_filter(filter.name, filter.extensions);
21 }
22
23 let dialog = dialog.save_single_file();
24
25 match dialog.show() {
26 Ok(maybe_path) => Ok(maybe_path),
27 Err(err) => Err(BlockingDialogError::NativeDialog(err)),
28 }
29 }
30}