Skip to main content

blocking_dialog/linux/
confirm.rs

1// SPDX-FileCopyrightText: 2026 Manuel Quarneti <mq1@ik.me>
2// SPDX-License-Identifier: MIT OR Apache-2.0
3
4use crate::{BlockingConfirmDialog, BlockingDialogError, BlockingDialogLevel};
5use native_dialog::{DialogBuilder, MessageLevel};
6use raw_window_handle::HasWindowHandle;
7
8fn get_native_dialog_level(level: BlockingDialogLevel) -> MessageLevel {
9    match level {
10        BlockingDialogLevel::Info => MessageLevel::Info,
11        BlockingDialogLevel::Warning => MessageLevel::Warning,
12        BlockingDialogLevel::Error => MessageLevel::Error,
13    }
14}
15
16impl<'a, W: HasWindowHandle> BlockingConfirmDialog<'a, W> {
17    pub fn show(&self) -> Result<bool, BlockingDialogError> {
18        let dialog = DialogBuilder::message()
19            .set_title(self.title)
20            .set_text(self.message)
21            .set_level(get_native_dialog_level(self.level))
22            .set_owner(&self.window)
23            .confirm();
24
25        match dialog.show() {
26            Ok(b) => Ok(b),
27            Err(e) => Err(BlockingDialogError::NativeDialog(e)),
28        }
29    }
30}