diff options
Diffstat (limited to 'main/src/ui/conversation_selector/conversation_selector.vala')
| -rw-r--r-- | main/src/ui/conversation_selector/conversation_selector.vala | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/main/src/ui/conversation_selector/conversation_selector.vala b/main/src/ui/conversation_selector/conversation_selector.vala index 5d88c540..c11eea82 100644 --- a/main/src/ui/conversation_selector/conversation_selector.vala +++ b/main/src/ui/conversation_selector/conversation_selector.vala @@ -14,6 +14,7 @@ public class ConversationSelector : Widget { ListBox list_box = new ListBox() { hexpand=true }; private StreamInteractor stream_interactor; + private string search_text = ""; private HashMap<Conversation, ConversationSelectorRow> rows = new HashMap<Conversation, ConversationSelectorRow>(Conversation.hash_func, Conversation.equals_func); public ConversationSelector init(StreamInteractor stream_interactor) { @@ -37,6 +38,7 @@ public class ConversationSelector : Widget { } construct { + list_box.set_filter_func(filter); list_box.set_sort_func(sort); realize.connect(() => { @@ -52,6 +54,16 @@ public class ConversationSelector : Widget { check_widget_leak(this); } + public void set_search_text(string text) { + search_text = text.strip().casefold(); + list_box.invalidate_filter(); + } + + private bool filter(ListBoxRow list_box_row) { + ConversationSelectorRow? row = list_box_row as ConversationSelectorRow; + return row != null && (search_text == "" || row.matches_search(search_text)); + } + public void row_activated(ListBoxRow r) { ConversationSelectorRow? row = r as ConversationSelectorRow; if (row != null) { |
