diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-09-18 23:15:06 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-10-09 14:08:59 +0200 |
| commit | 2f1f04b3e80beaf2c7f333a14cb7e14eeafe935e (patch) | |
| tree | 8595300e969dc7510804ea26e7d15d2d2e5ea7b7 | |
| parent | be7e0c2d5689d962fd2424e60ed21062d0674e95 (diff) | |
Make send button settings-selectable
| -rw-r--r-- | libdino/src/entity/settings.vala | 28 | ||||
| -rw-r--r-- | main/data/settings_dialog.ui | 24 | ||||
| -rw-r--r-- | main/src/ui/chat_input/chat_text_view.vala | 7 | ||||
| -rw-r--r-- | main/src/ui/chat_input/view.vala | 66 | ||||
| -rw-r--r-- | main/src/ui/settings_dialog.vala | 15 |
5 files changed, 107 insertions, 33 deletions
diff --git a/libdino/src/entity/settings.vala b/libdino/src/entity/settings.vala index 716c5f7d..2e0bce1b 100644 --- a/libdino/src/entity/settings.vala +++ b/libdino/src/entity/settings.vala @@ -13,6 +13,8 @@ public class Settings : Object { convert_utf8_smileys_ = col_to_bool_or_default("convert_utf8_smileys", true); check_spelling = col_to_bool_or_default("check_spelling", true); 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); } private bool col_to_bool_or_default(string key, bool def) { @@ -98,6 +100,32 @@ public class Settings : Object { default_encryption_ = value; } } + + public signal void send_button_update(bool visible); + private bool send_button_; + public bool send_button { + get { return send_button_; } + set { + db.settings.upsert() + .value(db.settings.key, "send_button", true) + .value(db.settings.value, value.to_string()) + .perform(); + send_button_ = value; + send_button_update(value); + } + } + + private bool enter_newline_; + public bool enter_newline { + get { return enter_newline_; } + set { + db.settings.upsert() + .value(db.settings.key, "enter_newline", true) + .value(db.settings.value, value.to_string()) + .perform(); + enter_newline_ = value; + } + } } } diff --git a/main/data/settings_dialog.ui b/main/data/settings_dialog.ui index 2d4b52c3..302a9e1c 100644 --- a/main/data/settings_dialog.ui +++ b/main/data/settings_dialog.ui @@ -148,6 +148,30 @@ <property name="height">1</property> </packing> </child> + <child> + <object class="GtkCheckButton" id="send_button_checkbutton"> + <property name="label" translatable="yes">Display send button</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">6</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="enter_newline_checkbutton"> + <property name="label" translatable="yes">Use Enter key to start a new line</property> + <property name="visible">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">7</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> </object> </child> </object> diff --git a/main/src/ui/chat_input/chat_text_view.vala b/main/src/ui/chat_input/chat_text_view.vala index 6b85b082..0bfb41a9 100644 --- a/main/src/ui/chat_input/chat_text_view.vala +++ b/main/src/ui/chat_input/chat_text_view.vala @@ -76,8 +76,11 @@ public class ChatTextView : ScrolledWindow { private bool on_text_input_key_press(EventKey event) { if (event.keyval in new uint[]{Key.Return, Key.KP_Enter}) { - if ((event.state & ModifierType.CONTROL_MASK) > 0) { - text_view.buffer.insert_at_cursor("\n", 1); + Dino.Entities.Settings settings = Dino.Application.get_default().settings; + + if ((event.state & ModifierType.SHIFT_MASK) > 0 + || settings.enter_newline) { + text_view.buffer.insert_at_cursor("\n", 1); } else if (text_view.buffer.text.strip() != "") { send_text(); edit_history.reset_history(); diff --git a/main/src/ui/chat_input/view.vala b/main/src/ui/chat_input/view.vala index 9de7c33f..454cff52 100644 --- a/main/src/ui/chat_input/view.vala +++ b/main/src/ui/chat_input/view.vala @@ -55,39 +55,43 @@ public class View : Box { outer_box.add(encryption_widget); - { - MenuButton send_button = new MenuButton() { - tooltip_text="Send message", - relief=ReliefStyle.NONE, - margin_top=3, - valign=Align.CENTER, - visible=true, - sensitive=false - }; - - send_button.get_style_context().add_class("flat"); - send_button.get_style_context().add_class("dino-chatinput-button"); - send_button.image = new Image.from_icon_name("document-send", IconSize.BUTTON) { - visible=true, - icon_size=3 - }; - - chat_text_view.text_view.buffer.changed.connect(() => { - if (chat_text_view.text_view.buffer.text != "") { - send_button.sensitive = true; - } - else { - send_button.sensitive = false; - } - }); + Dino.Entities.Settings settings = Dino.Application.get_default().settings; + + MenuButton send_button = new MenuButton() { + tooltip_text="Send message", + relief=ReliefStyle.NONE, + margin_top=3, + valign=Align.CENTER, + visible=settings.send_button, + sensitive=false + }; + + settings.send_button_update.connect(() => { + send_button.visible = settings.send_button; + }); - send_button.button_release_event.connect(() => { - chat_text_view.send_text(); - return true; - }); + send_button.get_style_context().add_class("flat"); + send_button.get_style_context().add_class("dino-chatinput-button"); + send_button.image = new Image.from_icon_name("document-send", IconSize.BUTTON) { + visible=true, + icon_size=3 + }; + + chat_text_view.text_view.buffer.changed.connect(() => { + if (chat_text_view.text_view.buffer.text != "") { + send_button.sensitive = true; + } + else { + send_button.sensitive = false; + } + }); - outer_box.add(send_button); - } + send_button.button_release_event.connect(() => { + chat_text_view.send_text(); + return true; + }); + + outer_box.add(send_button); Util.force_css(frame, "* { border-radius: 3px; }"); diff --git a/main/src/ui/settings_dialog.vala b/main/src/ui/settings_dialog.vala index 59edef2c..fc1eb678 100644 --- a/main/src/ui/settings_dialog.vala +++ b/main/src/ui/settings_dialog.vala @@ -14,6 +14,8 @@ class SettingsDialog : Dialog { [GtkChild] private unowned RadioButton encryption_radio_undecided; [GtkChild] private unowned RadioButton encryption_radio_omemo; [GtkChild] private unowned RadioButton encryption_radio_openpgp; + [GtkChild] private unowned CheckButton send_button_checkbutton; + [GtkChild] private unowned CheckButton enter_newline_checkbutton; Dino.Entities.Settings settings = Dino.Application.get_default().settings; @@ -28,6 +30,9 @@ class SettingsDialog : Dialog { encryption_radio_undecided.active = settings.default_encryption == Encryption.UNKNOWN; encryption_radio_omemo.active = settings.default_encryption == Encryption.OMEMO; encryption_radio_openpgp.active = settings.default_encryption == Encryption.PGP; + send_button_checkbutton.active = settings.send_button; + enter_newline_checkbutton.active = settings.enter_newline; + enter_newline_checkbutton.sensitive = settings.send_button; typing_checkbutton.toggled.connect(() => { settings.send_typing = typing_checkbutton.active; } ); marker_checkbutton.toggled.connect(() => { settings.send_marker = marker_checkbutton.active; } ); @@ -52,6 +57,16 @@ class SettingsDialog : Dialog { settings.default_encryption = Encryption.PGP; } }); + + send_button_checkbutton.toggled.connect(() => { settings.send_button = send_button_checkbutton.active; }); + enter_newline_checkbutton.toggled.connect(() => { settings.enter_newline = enter_newline_checkbutton.active; }); + settings.send_button_update.connect((visible) => { + enter_newline_checkbutton.sensitive = visible; + + if (visible == false) { + enter_newline_checkbutton.active = visible; + } + }); } } |
