pub use rfd::*;
#[cfg(not(target_os = "linux"))]
macro_rules! run_dialog {
($e:expr, $h: ident) => {{
std::thread::spawn(move || {
let response = $e;
$h(response);
});
}};
}
#[cfg(target_os = "linux")]
macro_rules! run_dialog {
($e:expr, $h: ident) => {{
std::thread::spawn(move || {
let context = glib::MainContext::default();
context.invoke_with_priority(glib::PRIORITY_HIGH, move || {
let response = $e;
$h(response);
});
});
}};
}
#[allow(unused_variables)]
pub fn dialog<F: FnOnce(MessageDialogResult) + Send + 'static>(
title: impl AsRef<str>,
message: impl AsRef<str>,
buttons: MessageButtons,
level: MessageLevel,
f: F,
) {
let title = title.as_ref().to_string();
let message = message.as_ref().to_string();
#[allow(unused_mut)]
let mut builder = MessageDialog::new()
.set_title(&title)
.set_description(&message)
.set_buttons(buttons)
.set_level(level.into());
run_dialog!(builder.show(), f)
}
#[allow(unused_variables)]
pub fn dialog_err(title: impl AsRef<str>, message: impl AsRef<str>) {
let msg = message.as_ref();
dialog(
title.as_ref(),
msg,
MessageButtons::Ok,
MessageLevel::Error,
|_|{},
);
}