@@ -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