blocking_dialog/linux/
pick_files.rs1use crate::{BlockingDialogError, BlockingPickFilesDialog};
5use native_dialog::DialogBuilder;
6use raw_window_handle::HasWindowHandle;
7use std::path::PathBuf;
8
9impl<'a, W: HasWindowHandle> BlockingPickFilesDialog<'a, W> {
10 pub fn show(&self) -> Result<Vec<PathBuf>, BlockingDialogError> {
11 let mut dialog = DialogBuilder::file()
12 .set_title(self.title)
13 .set_owner(&self.window);
14
15 for entry in self.filter {
16 dialog = dialog.add_filter(entry.name, entry.extensions);
17 }
18
19 if self.multiple {
20 let dialog = dialog.open_multiple_file();
21
22 match dialog.show() {
23 Ok(paths) => Ok(paths),
24 Err(err) => Err(BlockingDialogError::NativeDialog(err)),
25 }
26 } else {
27 let dialog = dialog.open_single_file();
28
29 match dialog.show() {
30 Ok(path) => Ok(path.into_iter().collect()),
31 Err(err) => Err(BlockingDialogError::NativeDialog(err)),
32 }
33 }
34 }
35}