aboutsummaryrefslogtreecommitdiff
path: root/src/preferences/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/preferences/pages')
-rw-r--r--src/preferences/pages/editor.rs43
-rw-r--r--src/preferences/pages/general.rs58
-rw-r--r--src/preferences/pages/map.rs26
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: &gtk::FontButton) -> gtk::Box {
+ fn create_font_row(font_button: &gtk::FontDialogButton) -> gtk::Box {
let row = gtk::Box::new(gtk::Orientation::Horizontal, 10);
row.append(&gtk::Label::new(Some(&tr!("preferences.editor.font"))));
row.append(font_button);
@@ -150,7 +152,7 @@ impl EditorPage {
font_size_scale: &gtk::Scale,
soft_wrap_switch: &gtk::Switch,
custom_font_switch: &gtk::Switch,
- font_button: &gtk::FontButton,
+ font_button: &gtk::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: &gtk::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: &gtk::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: &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();
}
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: &gtk::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(&gtk::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,