Skip to content

Commit 6eee355

Browse files
authored
refactor(core): use tinyfiledialogs-rs for message/confirmation dialogs (#1255)
1 parent f51801f commit 6eee355

File tree

8 files changed

+79
-97
lines changed

8 files changed

+79
-97
lines changed

.changes/dialog-api.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"tauri-api": minor
3+
---
4+
5+
The `message` and `ask` dialogs now use `tinyfiledialogs-rs` instead of `tauri-dialog-rs`.

tauri-api/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ flate2 = "1.0"
2828
thiserror = "1.0.23"
2929
rand = "0.8"
3030
nfd = "0.0.4"
31-
tauri-dialog = "0.1.0"
31+
tinyfiledialogs = "3.3"
3232
reqwest = { version = "0.11", features = [ "json", "multipart" ] }
3333
bytes = { version = "1", features = ["serde"] }
3434
http = "0.2"

tauri-api/src/dialog.rs

+28-23
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,34 @@ use std::path::Path;
22

33
pub use nfd::Response;
44
use nfd::{open_dialog, DialogType};
5-
pub use tauri_dialog::DialogSelection;
6-
use tauri_dialog::{DialogBuilder, DialogButtons, DialogStyle};
5+
6+
use tinyfiledialogs::{message_box_ok, message_box_yes_no, MessageBoxIcon, YesNo};
7+
8+
/// Response for the ask dialog
9+
pub enum AskResponse {
10+
/// User confirmed.
11+
Yes,
12+
/// User denied.
13+
No,
14+
}
15+
16+
/// Displays a dialog with a message and an optional title with a "yes" and a "no" button
17+
pub fn ask(title: impl AsRef<str>, message: impl AsRef<str>) -> AskResponse {
18+
match message_box_yes_no(
19+
title.as_ref(),
20+
message.as_ref(),
21+
MessageBoxIcon::Question,
22+
YesNo::No,
23+
) {
24+
YesNo::Yes => AskResponse::Yes,
25+
YesNo::No => AskResponse::No,
26+
}
27+
}
28+
29+
/// Displays a message dialog
30+
pub fn message(title: impl AsRef<str>, message: impl AsRef<str>) {
31+
message_box_ok(title.as_ref(), message.as_ref(), MessageBoxIcon::Info);
32+
}
733

834
fn open_dialog_internal(
935
dialog_type: DialogType,
@@ -24,27 +50,6 @@ fn open_dialog_internal(
2450
}
2551
}
2652

27-
/// Displays a dialog with a message and an optional title with a "yes" and a "no" button
28-
pub fn ask(message: impl AsRef<str>, title: impl AsRef<str>) -> DialogSelection {
29-
DialogBuilder::new()
30-
.message(message.as_ref())
31-
.title(title.as_ref())
32-
.style(DialogStyle::Question)
33-
.buttons(DialogButtons::YesNo)
34-
.build()
35-
.show()
36-
}
37-
38-
/// Displays a message dialog
39-
pub fn message(message: impl AsRef<str>, title: impl AsRef<str>) {
40-
DialogBuilder::new()
41-
.message(message.as_ref())
42-
.title(title.as_ref())
43-
.style(DialogStyle::Info)
44-
.build()
45-
.show();
46-
}
47-
4853
/// Open single select file dialog
4954
pub fn select(
5055
filter_list: Option<impl AsRef<str>>,

tauri/examples/api/src-tauri/Cargo.lock

+11-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tauri/examples/communication/src-tauri/Cargo.lock

+13-22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tauri/examples/multiwindow/src-tauri/Cargo.lock

+11-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tauri/src/endpoints/dialog.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::api::dialog::{
22
ask as ask_dialog, message as message_dialog, pick_folder, save_file, select, select_multiple,
3-
DialogSelection, Response,
3+
AskResponse, Response,
44
};
55
use serde::Deserialize;
66
use serde_json::Value as JsonValue;
@@ -72,8 +72,8 @@ impl Cmd {
7272
Self::MessageDialog { message } => {
7373
let exe = std::env::current_exe()?;
7474
let app_name = exe
75-
.file_name()
76-
.expect("failed to get exe filename")
75+
.file_stem()
76+
.expect("failed to get binary filename")
7777
.to_string_lossy()
7878
.to_string();
7979
message_dialog(app_name, message);
@@ -84,8 +84,8 @@ impl Cmd {
8484
let answer = ask(
8585
title.unwrap_or_else(|| {
8686
exe
87-
.file_name()
88-
.expect("failed to get exe filename")
87+
.file_stem()
88+
.expect("failed to get binary filename")
8989
.to_string_lossy()
9090
.to_string()
9191
}),
@@ -131,8 +131,8 @@ pub fn save(options: SaveDialogOptions) -> crate::Result<JsonValue> {
131131

132132
/// Shows a dialog with a yes/no question.
133133
pub fn ask(title: String, message: String) -> crate::Result<bool> {
134-
match ask_dialog(message, title) {
135-
DialogSelection::Yes => Ok(true),
134+
match ask_dialog(title, message) {
135+
AskResponse::Yes => Ok(true),
136136
_ => Ok(false),
137137
}
138138
}

tauri/src/endpoints/notification.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -82,20 +82,19 @@ pub fn request_permission() -> crate::Result<String> {
8282
return Ok(if allow_notification { granted } else { denied });
8383
}
8484
let answer = tauri_api::dialog::ask(
85-
"This app wants to show notifications. Do you allow?",
8685
"Permissions",
86+
"This app wants to show notifications. Do you allow?",
8787
);
8888
match answer {
89-
tauri_api::dialog::DialogSelection::Yes => {
89+
tauri_api::dialog::AskResponse::Yes => {
9090
settings.allow_notification = Some(true);
9191
crate::settings::write_settings(settings)?;
9292
Ok(granted)
9393
}
94-
tauri_api::dialog::DialogSelection::No => {
94+
tauri_api::dialog::AskResponse::No => {
9595
settings.allow_notification = Some(false);
9696
crate::settings::write_settings(settings)?;
9797
Ok(denied)
9898
}
99-
_ => Ok("default".to_string()),
10099
}
101100
}

0 commit comments

Comments
 (0)