Skip to content

Commit 1682a86

Browse files
committed
map buttons for linux
1 parent 51ad30d commit 1682a86

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

plugins/dialog/src/desktop.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,38 @@ pub fn show_message_dialog<R: Runtime, F: FnOnce(MessageDialogResult) + Send + '
220220

221221
let handle = dialog.dialog.app_handle().to_owned();
222222
let _ = handle.run_on_main_thread(move || {
223+
let buttons = dialog.buttons.clone();
223224
let dialog = AsyncMessageDialog::from(dialog).show();
224-
std::thread::spawn(move || f(tauri::async_runtime::block_on(dialog)));
225+
std::thread::spawn(move || {
226+
let result = tauri::async_runtime::block_on(dialog);
227+
// on Linux rfd does not return rfd::MessageDialogResult::Custom, so we must map manually
228+
let result = match (result, buttons) {
229+
(rfd::MessageDialogResult::Ok, MessageDialogButtons::OkCustom(s)) => {
230+
rfd::MessageDialogResult::Custom(s)
231+
}
232+
(
233+
rfd::MessageDialogResult::Ok,
234+
MessageDialogButtons::OkCancelCustom(ok, _cancel),
235+
) => rfd::MessageDialogResult::Custom(ok),
236+
(
237+
rfd::MessageDialogResult::Cancel,
238+
MessageDialogButtons::OkCancelCustom(_ok, cancel),
239+
) => rfd::MessageDialogResult::Custom(cancel),
240+
(
241+
rfd::MessageDialogResult::Yes,
242+
MessageDialogButtons::YesNoCancelCustom(yes, _no, _cancel),
243+
) => rfd::MessageDialogResult::Custom(yes),
244+
(
245+
rfd::MessageDialogResult::No,
246+
MessageDialogButtons::YesNoCancelCustom(_yes, no, _cancel),
247+
) => rfd::MessageDialogResult::Custom(no),
248+
(
249+
rfd::MessageDialogResult::Cancel,
250+
MessageDialogButtons::YesNoCancelCustom(_yes, _no, cancel),
251+
) => rfd::MessageDialogResult::Custom(cancel),
252+
(result, _) => result,
253+
};
254+
f(result);
255+
});
225256
});
226257
}

0 commit comments

Comments
 (0)