diff options
Diffstat (limited to 'src/preferences/pages/general.rs')
| -rw-r--r-- | src/preferences/pages/general.rs | 58 |
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: >k::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: >k::Window) { @@ -129,28 +123,22 @@ pub fn show_import_dialog(sender: &Sender<PreferencesInput>, window: >k::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(); } |