aboutsummaryrefslogtreecommitdiff
path: root/src/preferences/pages/general.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/preferences/pages/general.rs')
-rw-r--r--src/preferences/pages/general.rs58
1 files changed, 23 insertions, 35 deletions
diff --git a/src/preferences/pages/general.rs b/src/preferences/pages/general.rs
index ad15c82..d1596c4 100644
--- a/src/preferences/pages/general.rs
+++ b/src/preferences/pages/general.rs
@@ -97,31 +97,25 @@ pub fn show_export_dialog(sender: &Sender<PreferencesInput>, window: &gtk::Windo
filter.add_pattern("*.json");
filter.set_name(Some(&tr!("dialog.file_type.json")));
- let dialog = gtk::FileChooserDialog::new(
- Some(&tr!("dialog.export_preferences.title")),
- Some(window),
- gtk::FileChooserAction::Save,
- &[
- (&tr!("dialog.action.cancel"), gtk::ResponseType::Cancel),
- (&tr!("dialog.action.save"), gtk::ResponseType::Accept),
- ],
- );
- dialog.set_current_name("preferences.json");
- dialog.add_filter(&filter);
- dialog.set_modal(true);
+ let filters = gtk::gio::ListStore::new::<gtk::FileFilter>();
+ filters.append(&filter);
+
+ let dialog = gtk::FileDialog::builder()
+ .title(tr!("dialog.export_preferences.title"))
+ .modal(true)
+ .filters(&filters)
+ .initial_name("preferences.json")
+ .build();
let sender = sender.clone();
- dialog.connect_response(move |dialog, response| {
- if response == gtk::ResponseType::Accept
- && let Some(file) = dialog.file()
+ let window = window.clone();
+ gtk::glib::spawn_future_local(async move {
+ if let Ok(file) = dialog.save_future(Some(&window)).await
&& let Some(path) = file.path()
{
sender.emit(PreferencesInput::ExportToFile(path));
}
- dialog.close();
});
-
- dialog.present();
}
pub fn show_import_dialog(sender: &Sender<PreferencesInput>, window: &gtk::Window) {
@@ -129,28 +123,22 @@ pub fn show_import_dialog(sender: &Sender<PreferencesInput>, window: &gtk::Windo
filter.add_pattern("*.json");
filter.set_name(Some(&tr!("dialog.file_type.json")));
- let dialog = gtk::FileChooserDialog::new(
- Some(&tr!("dialog.import_preferences.title")),
- Some(window),
- gtk::FileChooserAction::Open,
- &[
- (&tr!("dialog.action.cancel"), gtk::ResponseType::Cancel),
- (&tr!("dialog.action.open"), gtk::ResponseType::Accept),
- ],
- );
- dialog.add_filter(&filter);
- dialog.set_modal(true);
+ let filters = gtk::gio::ListStore::new::<gtk::FileFilter>();
+ filters.append(&filter);
+
+ let dialog = gtk::FileDialog::builder()
+ .title(tr!("dialog.import_preferences.title"))
+ .modal(true)
+ .filters(&filters)
+ .build();
let sender = sender.clone();
- dialog.connect_response(move |dialog, response| {
- if response == gtk::ResponseType::Accept
- && let Some(file) = dialog.file()
+ let window = window.clone();
+ gtk::glib::spawn_future_local(async move {
+ if let Ok(file) = dialog.open_future(Some(&window)).await
&& let Some(path) = file.path()
{
sender.emit(PreferencesInput::ImportFromFile(path));
}
- dialog.close();
});
-
- dialog.present();
}