diff options
Diffstat (limited to 'main/src')
-rw-r--r-- | main/src/ui/chat_input.vala | 13 | ||||
-rw-r--r-- | main/src/ui/conversation_selector/view.vala | 2 | ||||
-rw-r--r-- | main/src/ui/conversation_summary/message_textview.vala | 2 |
3 files changed, 14 insertions, 3 deletions
diff --git a/main/src/ui/chat_input.vala b/main/src/ui/chat_input.vala index 5030fcea..209869a8 100644 --- a/main/src/ui/chat_input.vala +++ b/main/src/ui/chat_input.vala @@ -8,14 +8,16 @@ using Xmpp; namespace Dino.Ui { [GtkTemplate (ui = "/org/dino-im/chat_input.ui")] -public class ChatInput : Grid { +public class ChatInput : Box { + [GtkChild] private ScrolledWindow scrolled; [GtkChild] private TextView text_input; private Conversation? conversation; private StreamInteractor stream_interactor; private HashMap<Conversation, string> entry_cache = new HashMap<Conversation, string>(Conversation.hash_func, Conversation.equals_func); private static HashMap<string, string> smiley_translations = new HashMap<string, string>(); + private int vscrollbar_min_height; static construct { smiley_translations[":)"] = "๐"; @@ -34,6 +36,8 @@ public class ChatInput : Grid { public ChatInput(StreamInteractor stream_interactor) { this.stream_interactor = stream_interactor; + scrolled.get_vscrollbar().get_preferred_height(out vscrollbar_min_height, null); + scrolled.vadjustment.notify["upper"].connect_after(on_upper_notify); } public void initialize_for_conversation(Conversation conversation) { @@ -93,6 +97,13 @@ public class ChatInput : Grid { return false; } + private void on_upper_notify() { + scrolled.vadjustment.value = scrolled.vadjustment.upper - scrolled.vadjustment.page_size; + + // hack for vscrollbar not requiring space and making textview higher //TODO doesn't resize immediately + scrolled.get_vscrollbar().visible = (scrolled.vadjustment.upper > scrolled.max_content_height - 2 * vscrollbar_min_height); + } + private void check_convert_smiley() { if (Dino.Settings.instance().convert_utf8_smileys) { foreach (string smiley in smiley_translations.keys) { diff --git a/main/src/ui/conversation_selector/view.vala b/main/src/ui/conversation_selector/view.vala index ae641664..5c1b4dfd 100644 --- a/main/src/ui/conversation_selector/view.vala +++ b/main/src/ui/conversation_selector/view.vala @@ -7,7 +7,7 @@ using Dino.Entities; namespace Dino.Ui.ConversationSelector { [GtkTemplate (ui = "/org/dino-im/conversation_selector/view.ui")] -public class View : Grid { +public class View : Box { public List conversation_list; [GtkChild] public SearchEntry search_entry; diff --git a/main/src/ui/conversation_summary/message_textview.vala b/main/src/ui/conversation_summary/message_textview.vala index 6474a1a3..28df9a53 100644 --- a/main/src/ui/conversation_summary/message_textview.vala +++ b/main/src/ui/conversation_summary/message_textview.vala @@ -35,7 +35,7 @@ public class MessageTextView : TextView { } private void format_suffix_urls(string text) { - int absolute_start = buffer.text.length - text.length; + int absolute_start = buffer.text.char_count() - text.char_count(); Regex url_regex = new Regex("""(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?ยซยปโโโโ]))"""); MatchInfo match_info; |