aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/ui')
-rw-r--r--main/src/ui/conversation_selector/conversation_selector.vala12
-rw-r--r--main/src/ui/conversation_selector/conversation_selector_row.vala6
-rw-r--r--main/src/ui/main_window.vala21
3 files changed, 29 insertions, 10 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) {
diff --git a/main/src/ui/conversation_selector/conversation_selector_row.vala b/main/src/ui/conversation_selector/conversation_selector_row.vala
index 11107c57..82c96fdc 100644
--- a/main/src/ui/conversation_selector/conversation_selector_row.vala
+++ b/main/src/ui/conversation_selector/conversation_selector_row.vala
@@ -43,6 +43,7 @@ public class ConversationSelectorRow : ListBoxRow {
var display_name_model = stream_interactor.get_module(ContactModels.IDENTITY).get_display_name_model(conversation);
display_name_model.bind_property("display-name", name_label, "label", BindingFlags.SYNC_CREATE);
+ name_label.notify["label"].connect(changed);
// Set tooltip
switch (conversation.type_) {
@@ -179,6 +180,11 @@ public class ConversationSelectorRow : ListBoxRow {
name_label.label = Util.get_conversation_display_name(stream_interactor, conversation);
}
+ public bool matches_search(string search_text) {
+ return name_label.label.casefold().contains(search_text) ||
+ conversation.counterpart.bare_jid.to_string().casefold().contains(search_text);
+ }
+
private void update_pinned_icon() {
pinned_image.visible = conversation.pinned != 0;
}
diff --git a/main/src/ui/main_window.vala b/main/src/ui/main_window.vala
index 6cabfea7..e18e0de3 100644
--- a/main/src/ui/main_window.vala
+++ b/main/src/ui/main_window.vala
@@ -7,14 +7,14 @@ using Dino.Entities;
namespace Dino.Ui {
[GtkTemplate (ui = "/im/dino/Dino/main_window.ui")]
-public class MainWindow : Adw.ApplicationWindow {
+public class MainWindow : Gtk.ApplicationWindow {
public signal void conversation_selected(Conversation conversation);
[GtkChild] public Stack stack;
[GtkChild] public Adw.NavigationSplitView navigation_split_view;
- [GtkChild] public MenuButton add_button;
+ [GtkChild] public SearchEntry conversation_search_entry;
[GtkChild] public MenuButton menu_button;
[GtkChild] public Adw.HeaderBar conversation_headerbar;
@@ -57,11 +57,17 @@ public class MainWindow : Adw.ApplicationWindow {
conversation_selector.init(stream_interactor);
conversation_selector.conversation_selected.connect_after(() => { navigation_split_view.show_content = true; });
+ conversation_search_entry.search_changed.connect(() => {
+ conversation_selector.set_search_text(conversation_search_entry.text);
+ });
+ conversation_search_entry.stop_search.connect(() => {
+ conversation_search_entry.text = "";
+ });
global_search = new GlobalSearch(stream_interactor);
search_frame.set_child(global_search.get_widget());
- create_add_menu(add_button, menu_button);
+ create_menu(menu_button);
stack.add_named(welcome_placeholder, "welcome_placeholder");
stack.add_named(accounts_placeholder, "accounts_placeholder");
@@ -134,13 +140,8 @@ public class MainWindow : Adw.ApplicationWindow {
}
}
- private static void create_add_menu(MenuButton add_button, MenuButton menu_button) {
- add_button.tooltip_text = Util.string_if_tooltips_active(_("Start Conversation"));
-
- Builder add_builder = new Builder.from_resource("/im/dino/Dino/menu_add.ui");
- MenuModel add_menu_model = add_builder.get_object("menu_add") as MenuModel;
- add_button.set_menu_model(add_menu_model);
-
+ private static void create_menu(MenuButton menu_button) {
+ menu_button.tooltip_text = Util.string_if_tooltips_active(_("Main Menu"));
Builder menu_builder = new Builder.from_resource("/im/dino/Dino/menu_app.ui");
MenuModel menu_menu_model = menu_builder.get_object("menu_app") as MenuModel;
menu_button.set_menu_model(menu_menu_model);