From 1c4d47f35274d560ee9eb855d7f1c45dd4dd140c Mon Sep 17 00:00:00 2001 From: Miquel Lionel Date: Fri, 13 Oct 2023 00:05:26 +0200 Subject: Add keyboard shortcut and setting to increase text size (fixes #978) * Can zoom in / out or reset zoom levels via shortcuts * Can change zoom value via global preferences window --- main/src/ui/application.vala | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'main/src/ui/application.vala') diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala index 2e785224..1a2c93ff 100644 --- a/main/src/ui/application.vala +++ b/main/src/ui/application.vala @@ -10,6 +10,9 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { private const string[] KEY_COMBINATION_ADD_CONFERENCE = {"G", null}; private const string[] KEY_COMBINATION_LOOP_CONVERSATIONS = {"Tab", null}; private const string[] KEY_COMBINATION_LOOP_CONVERSATIONS_REV = {"Tab", null}; + private const string[] KEY_COMBINATION_ZOOM_IN = {"KP_Add", "plus", null}; + private const string[] KEY_COMBINATION_ZOOM_OUT = {"KP_Subtract","minus", null}; + private const string[] KEY_COMBINATION_ZOOM_RESET = {"0", "KP_0", null}; private MainWindow window; public MainWindowController controller; @@ -32,10 +35,8 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { init(); Environment.set_application_name("Dino"); Window.set_default_icon_name("im.dino.Dino"); - create_actions(); add_main_option_entries(options); - startup.connect(() => { if (print_version) { print(@"Dino $(Dino.get_version())\n"); @@ -79,6 +80,7 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { if ((get_flags() & ApplicationFlags.IS_SERVICE) == ApplicationFlags.IS_SERVICE) window.hide_on_close = true; } window.present(); + Util.force_css(window, "* { font-size: " + settings.zoom_level.to_string() + "% ;} " ); }); } @@ -111,7 +113,12 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { break; } } - + + private void set_zoom(int step){ + if (step == 0) settings.zoom_level = 100; else settings.zoom_level += step; + Util.force_css(window, "* { font-size: " + settings.zoom_level.to_string() + "% ;} " ); + } + private void create_actions() { SimpleAction accounts_action = new SimpleAction("accounts", null); accounts_action.activate.connect(show_accounts_window); @@ -146,6 +153,23 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { }); add_action(deny_subscription_action); + + SimpleAction zoom_in_action = new SimpleAction("zoom_in", null); + zoom_in_action.activate.connect(() => { set_zoom(+5); } ); + add_action(zoom_in_action); + set_accels_for_action("app.zoom_in", KEY_COMBINATION_ZOOM_IN); + + SimpleAction zoom_out_action = new SimpleAction("zoom_out", null); + zoom_out_action.activate.connect(() => { set_zoom(-5); } ); + add_action(zoom_out_action); + set_accels_for_action("app.zoom_out", KEY_COMBINATION_ZOOM_OUT); + + SimpleAction zoom_reset_action = new SimpleAction("zoom_reset", null); + zoom_reset_action.activate.connect(() => { set_zoom(0); } ); + add_action(zoom_reset_action); + set_accels_for_action("app.zoom_reset", KEY_COMBINATION_ZOOM_RESET); + + SimpleAction contacts_action = new SimpleAction("add_chat", null); contacts_action.activate.connect(() => { AddChatDialog add_chat_dialog = new AddChatDialog(stream_interactor, stream_interactor.get_accounts()); @@ -244,6 +268,9 @@ public class Dino.Ui.Application : Adw.Application, Dino.Application { private void show_settings_window() { SettingsDialog dialog = new SettingsDialog(); dialog.set_transient_for(get_active_window()); + dialog.zoom_spinbutton_config.value_changed.connect( () => { + Util.force_css(window, "* { font-size: " + settings.zoom_level.to_string() + "% ;} " ); + }); dialog.present(); } -- cgit v1.2.3-70-g09d2