Skip to main content

blocking_dialog/linux/
save_file.rs

1// SPDX-FileCopyrightText: 2026 Manuel Quarneti <mq1@ik.me>
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4use crate::{BlockingDialogError, BlockingSaveFileDialog};
5use raw_window_handle::{HasDisplayHandle, HasWindowHandle};
6use rfd::FileDialog;
7use std::path::PathBuf;
8
9impl<'a, W: HasWindowHandle + HasDisplayHandle> BlockingSaveFileDialog<'a, W> {
10    pub fn show(&self) -> Result<Option<PathBuf>, BlockingDialogError> {
11        let mut dialog = FileDialog::new()
12            .set_title(self.title)
13            .set_parent(&self.window);
14
15        if let Some(default_filename) = self.default_filename {
16            dialog = dialog.set_file_name(default_filename);
17        }
18
19        for filter in self.filter {
20            dialog = dialog.add_filter(filter.name, filter.extensions);
21        }
22
23        let result = dialog.save_file();
24        Ok(result)
25    }
26}