@@ -220,7 +220,38 @@ pub fn show_message_dialog<R: Runtime, F: FnOnce(MessageDialogResult) + Send + '
220
220
221
221
let handle = dialog. dialog . app_handle ( ) . to_owned ( ) ;
222
222
let _ = handle. run_on_main_thread ( move || {
223
+ let buttons = dialog. buttons . clone ( ) ;
223
224
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
+ } ) ;
225
256
} ) ;
226
257
}
0 commit comments