diff options
| author | Rubén Beltrán del Río <jj@r.bdr.sh> | 2026-01-19 00:38:37 +0100 |
|---|---|---|
| committer | Rubén Beltrán del Río <jj@r.bdr.sh> | 2026-01-19 02:28:00 +0100 |
| commit | b41c4768d9b2e41532ae0018469809ff37280216 (patch) | |
| tree | cd73007bd2690efeca6ecfbc8eab4f61232bfb1f /src/preferences | |
| parent | a5ac6203f247d884aba8530b108d554ff80be333 (diff) | |
Update to use Gnome 48 features1.0.0
Diffstat (limited to 'src/preferences')
| -rw-r--r-- | src/preferences/pages/editor.rs | 43 | ||||
| -rw-r--r-- | src/preferences/pages/general.rs | 58 | ||||
| -rw-r--r-- | src/preferences/pages/map.rs | 26 |
3 files changed, 59 insertions, 68 deletions
diff --git a/src/preferences/pages/editor.rs b/src/preferences/pages/editor.rs index 27b94da..c0e9b41 100644 --- a/src/preferences/pages/editor.rs +++ b/src/preferences/pages/editor.rs @@ -31,7 +31,7 @@ pub struct EditorPage { font_size_scale: gtk::Scale, soft_wrap_switch: gtk::Switch, custom_font_switch: gtk::Switch, - font_button: gtk::FontButton, + font_button: gtk::FontDialogButton, } impl EditorPage { @@ -124,21 +124,23 @@ impl EditorPage { (soft_wrap_row.1, custom_font_row.1) } - fn create_font_button(preferences: &UserPreferences) -> gtk::FontButton { - let button = gtk::FontButton::new(); + fn create_font_button(preferences: &UserPreferences) -> gtk::FontDialogButton { + let font_dialog = gtk::FontDialog::new(); + let font_button = gtk::FontDialogButton::new(Some(font_dialog)); #[allow(clippy::cast_possible_truncation)] - button.set_font(&format!( + let font_desc = gtk::pango::FontDescription::from_string(&format!( "{} {}", preferences.custom_editor_font_name, preferences.editor_font_size as i32 )); - button.set_sensitive(preferences.use_custom_editor_font); - button.set_hexpand(true); - button.set_use_font(true); - button.set_use_size(false); - button + font_button.set_font_desc(&font_desc); + font_button.set_sensitive(preferences.use_custom_editor_font); + font_button.set_hexpand(true); + font_button.set_use_font(true); + font_button.set_use_size(false); + font_button } - fn create_font_row(font_button: >k::FontButton) -> gtk::Box { + fn create_font_row(font_button: >k::FontDialogButton) -> gtk::Box { let row = gtk::Box::new(gtk::Orientation::Horizontal, 10); row.append(>k::Label::new(Some(&tr!("preferences.editor.font")))); row.append(font_button); @@ -150,7 +152,7 @@ impl EditorPage { font_size_scale: >k::Scale, soft_wrap_switch: >k::Switch, custom_font_switch: >k::Switch, - font_button: >k::FontButton, + font_button: >k::FontDialogButton, ) { let s = sender.clone(); let fb = font_button.clone(); @@ -167,15 +169,14 @@ impl EditorPage { let s = sender.clone(); let scale = font_size_scale.clone(); - font_button.connect_font_set(move |button| { - if let Some(font) = button.font() { - let font_desc = gtk::pango::FontDescription::from_string(&font); - if let Some(family) = font_desc.family() { + font_button.connect_font_desc_notify(move |button| { + if let Some(font) = button.font_desc() { + if let Some(family) = font.family() { s.emit(PreferencesInput::SetCustomEditorFontName( family.to_string(), )); } - let size = font_desc.size() / gtk::pango::SCALE; + let size = font.size() / gtk::pango::SCALE; if size > 0 { scale.set_value(f64::from(size)); } @@ -191,12 +192,11 @@ impl EditorPage { }); } - fn update_font_button_size(font_button: >k::FontButton, size: f64) { - if let Some(font) = font_button.font() { - let mut font_desc = gtk::pango::FontDescription::from_string(&font); + fn update_font_button_size(font_button: >k::FontDialogButton, size: f64) { + if let Some(mut font_desc) = font_button.font_desc() { #[allow(clippy::cast_possible_truncation)] font_desc.set_size(size as i32 * gtk::pango::SCALE); - font_button.set_font(&font_desc.to_string()); + font_button.set_font_desc(&font_desc); } } @@ -213,9 +213,10 @@ impl EditorPage { self.font_button .set_sensitive(preferences.use_custom_editor_font); #[allow(clippy::cast_possible_truncation)] - self.font_button.set_font(&format!( + let font_desc = gtk::pango::FontDescription::from_string(&format!( "{} {}", preferences.custom_editor_font_name, preferences.editor_font_size as i32 )); + self.font_button.set_font_desc(&font_desc); } } 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(); } diff --git a/src/preferences/pages/map.rs b/src/preferences/pages/map.rs index 4355c6f..5645a59 100644 --- a/src/preferences/pages/map.rs +++ b/src/preferences/pages/map.rs @@ -14,9 +14,9 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. -use gtk::prelude::*; use relm4::Sender; use relm4::gtk; +use sourceview5::prelude::*; use crate::tr; use crate::ui_helpers::create_switch_row; @@ -29,7 +29,7 @@ pub struct MapPage { show_background_switch: gtk::Switch, smart_positioning_switch: gtk::Switch, custom_font_switch: gtk::Switch, - font_button: gtk::FontButton, + font_button: gtk::FontDialogButton, export_format_dropdown: gtk::DropDown, } @@ -61,7 +61,7 @@ impl MapPage { container: >k::Box, preferences: &UserPreferences, sender: &Sender<PreferencesInput>, - ) -> (gtk::Switch, gtk::Switch, gtk::Switch, gtk::FontButton) { + ) -> (gtk::Switch, gtk::Switch, gtk::Switch, gtk::FontDialogButton) { let style_label = gtk::Label::new(Some(&tr!("preferences.map.map_style.title"))); style_label.add_css_class("heading"); style_label.set_halign(gtk::Align::Start); @@ -109,19 +109,20 @@ impl MapPage { let font_row = gtk::Box::new(gtk::Orientation::Horizontal, 10); font_row.append(>k::Label::new(Some(&tr!("preferences.map.font")))); - let font_button = gtk::FontButton::new(); - font_button.set_font(&preferences.custom_font_name); + let font_dialog = gtk::FontDialog::new(); + let font_button = gtk::FontDialogButton::new(Some(font_dialog)); + let font_desc = gtk::pango::FontDescription::from_string(&preferences.custom_font_name); + font_button.set_font_desc(&font_desc); font_button.set_sensitive(preferences.use_custom_font); font_button.set_hexpand(true); font_button.set_use_font(true); { let sender = sender.clone(); - font_button.connect_font_set(move |button| { - if let Some(font) = button.font() { - let font_desc = gtk::pango::FontDescription::from_string(&font); - if let Some(family) = font_desc.family() { - sender.emit(PreferencesInput::SetCustomFontName(family.to_string())); - } + font_button.connect_font_desc_notify(move |button| { + if let Some(font) = button.font_desc() + && let Some(family) = font.family() + { + sender.emit(PreferencesInput::SetCustomFontName(family.to_string())); } }); } @@ -199,7 +200,8 @@ impl MapPage { self.custom_font_switch .set_active(preferences.use_custom_font); self.font_button.set_sensitive(preferences.use_custom_font); - self.font_button.set_font(&preferences.custom_font_name); + let font_desc = gtk::pango::FontDescription::from_string(&preferences.custom_font_name); + self.font_button.set_font_desc(&font_desc); let selected = match preferences.default_export_format.as_str() { "svg" => 1, |