aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-09-18 23:42:07 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2023-10-09 14:08:59 +0200
commit677ac164a953a90acff60e7b84b0091184f56464 (patch)
treee015357c23ab56326fae4217c25d294b6626b850
parent2f1f04b3e80beaf2c7f333a14cb7e14eeafe935e (diff)
Make Ctrl-Q accelerator user-configurable
Some devices, such as those using virtual keyboards such as Squeekboard, might find the Ctrl-Q accelerator annoying, as it can be easily mistyped.
-rw-r--r--libdino/src/entity/settings.vala15
-rw-r--r--main/data/settings_dialog.ui12
-rw-r--r--main/src/ui/application.vala17
-rw-r--r--main/src/ui/settings_dialog.vala3
4 files changed, 46 insertions, 1 deletions
diff --git a/libdino/src/entity/settings.vala b/libdino/src/entity/settings.vala
index 2e0bce1b..42631acf 100644
--- a/libdino/src/entity/settings.vala
+++ b/libdino/src/entity/settings.vala
@@ -15,6 +15,7 @@ public class Settings : Object {
default_encryption = col_to_encryption_or_default("default_encryption", Encryption.OMEMO);
send_button = col_to_bool_or_default("send_button", false);
enter_newline = col_to_bool_or_default("enter_newline", false);
+ quit_ctrl_q = col_to_bool_or_default("quit_ctrl_q", true);
}
private bool col_to_bool_or_default(string key, bool def) {
@@ -126,6 +127,20 @@ public class Settings : Object {
enter_newline_ = value;
}
}
+
+ public signal void quit_ctrl_q_update(bool active);
+ private bool quit_ctrl_q_;
+ public bool quit_ctrl_q {
+ get { return quit_ctrl_q_; }
+ set {
+ db.settings.upsert()
+ .value(db.settings.key, "quit_ctrl_q", true)
+ .value(db.settings.value, value.to_string())
+ .perform();
+ quit_ctrl_q_ = value;
+ quit_ctrl_q_update(value);
+ }
+ }
}
}
diff --git a/main/data/settings_dialog.ui b/main/data/settings_dialog.ui
index 302a9e1c..a45b0664 100644
--- a/main/data/settings_dialog.ui
+++ b/main/data/settings_dialog.ui
@@ -172,6 +172,18 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="quit_ctrl_q_checkbutton">
+ <property name="label" translatable="yes">Quit Dino with Ctrl+Q</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">8</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala
index 91d4dec4..a7aaf075 100644
--- a/main/src/ui/application.vala
+++ b/main/src/ui/application.vala
@@ -117,6 +117,8 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application {
}
private void create_actions() {
+ Dino.Entities.Settings settings = Dino.Application.get_default().settings;
+
SimpleAction accounts_action = new SimpleAction("accounts", null);
accounts_action.activate.connect(show_accounts_window);
add_action(accounts_action);
@@ -132,7 +134,20 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application {
SimpleAction quit_action = new SimpleAction("quit", null);
quit_action.activate.connect(quit);
add_action(quit_action);
- set_accels_for_action("app.quit", KEY_COMBINATION_QUIT);
+
+ if (settings.quit_ctrl_q) {
+ set_accels_for_action("app.quit", KEY_COMBINATION_QUIT);
+ }
+
+ settings.quit_ctrl_q_update.connect((active) =>
+ {
+ if (active) {
+ set_accels_for_action("app.quit", KEY_COMBINATION_QUIT);
+ }
+ else {
+ set_accels_for_action("app.quit", {null});
+ }
+ });
SimpleAction open_conversation_action = new SimpleAction("open-conversation", VariantType.INT32);
open_conversation_action.activate.connect((variant) => {
diff --git a/main/src/ui/settings_dialog.vala b/main/src/ui/settings_dialog.vala
index fc1eb678..14abc580 100644
--- a/main/src/ui/settings_dialog.vala
+++ b/main/src/ui/settings_dialog.vala
@@ -16,6 +16,7 @@ class SettingsDialog : Dialog {
[GtkChild] private unowned RadioButton encryption_radio_openpgp;
[GtkChild] private unowned CheckButton send_button_checkbutton;
[GtkChild] private unowned CheckButton enter_newline_checkbutton;
+ [GtkChild] private unowned CheckButton quit_ctrl_q_checkbutton;
Dino.Entities.Settings settings = Dino.Application.get_default().settings;
@@ -33,6 +34,7 @@ class SettingsDialog : Dialog {
send_button_checkbutton.active = settings.send_button;
enter_newline_checkbutton.active = settings.enter_newline;
enter_newline_checkbutton.sensitive = settings.send_button;
+ quit_ctrl_q_checkbutton.active = settings.quit_ctrl_q;
typing_checkbutton.toggled.connect(() => { settings.send_typing = typing_checkbutton.active; } );
marker_checkbutton.toggled.connect(() => { settings.send_marker = marker_checkbutton.active; } );
@@ -67,6 +69,7 @@ class SettingsDialog : Dialog {
enter_newline_checkbutton.active = visible;
}
});
+ quit_ctrl_q_checkbutton.toggled.connect(() => { settings.quit_ctrl_q = quit_ctrl_q_checkbutton.active; });
}
}