From af49a47cf6c5933a9bcc21f2b7bb20d85be37483 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Wed, 15 Mar 2017 22:01:32 +0100 Subject: Fix ChatInput for many lines + small UI changes --- main/src/ui/chat_input.vala | 13 ++++++++++++- main/src/ui/conversation_selector/view.vala | 2 +- main/src/ui/conversation_summary/message_textview.vala | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'main/src') 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 entry_cache = new HashMap(Conversation.hash_func, Conversation.equals_func); private static HashMap smiley_translations = new HashMap(); + 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; -- cgit v1.2.3-54-g00ecf