Skip to main content

blocking_dialog/linux/
pick_directory.rs

1// SPDX-FileCopyrightText: 2026 Manuel Quarneti <mq1@ik.me>
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4use crate::{BlockingDialogError, BlockingPickDirectoryDialog};
5use native_dialog::DialogBuilder;
6use raw_window_handle::HasWindowHandle;
7use std::path::PathBuf;
8
9impl<'a, W: HasWindowHandle> BlockingPickDirectoryDialog<'a, W> {
10    pub fn show(&self) -> Result<Option<PathBuf>, BlockingDialogError> {
11        let dialog = DialogBuilder::file()
12            .set_title(self.title)
13            .set_owner(&self.window)
14            .open_single_dir();
15
16        match dialog.show() {
17            Ok(maybe_path) => Ok(maybe_path),
18            Err(e) => Err(BlockingDialogError::NativeDialog(e)),
19        }
20    }
21}