diff options
Diffstat (limited to 'main')
| -rw-r--r-- | main/data/gresource.xml | 1 | ||||
| -rw-r--r-- | main/data/main_window.ui | 54 | ||||
| -rw-r--r-- | main/data/main_window_placeholder.ui | 5 | ||||
| -rw-r--r-- | main/data/menu_add.ui | 15 | ||||
| -rw-r--r-- | main/data/menu_app.ui | 10 | ||||
| -rw-r--r-- | main/data/style.css | 16 | ||||
| -rw-r--r-- | main/src/main.vala | 1 | ||||
| -rw-r--r-- | main/src/ui/conversation_selector/conversation_selector.vala | 12 | ||||
| -rw-r--r-- | main/src/ui/conversation_selector/conversation_selector_row.vala | 6 | ||||
| -rw-r--r-- | main/src/ui/main_window.vala | 21 |
10 files changed, 79 insertions, 62 deletions
diff --git a/main/data/gresource.xml b/main/data/gresource.xml index 2e38153b..b1dc2c40 100644 --- a/main/data/gresource.xml +++ b/main/data/gresource.xml @@ -98,7 +98,6 @@ <file>join_room_dialog2.ui</file> <file>main_window.ui</file> <file>main_window_placeholder.ui</file> - <file>menu_add.ui</file> <file>menu_app.ui</file> <file>menu_conversation.ui</file> <file>menu_encryption.ui</file> diff --git a/main/data/main_window.ui b/main/data/main_window.ui index 6ca4e915..8ca1b704 100644 --- a/main/data/main_window.ui +++ b/main/data/main_window.ui @@ -2,15 +2,19 @@ <interface> <requires lib="gtk" version="4.0"/> <requires lib="libadwaita" version="1.4"/> - <template class="DinoUiMainWindow" parent="AdwApplicationWindow"> - <child> - <object class="AdwBreakpoint"> - <condition>max-width: 600sp</condition> - <setter object="navigation_split_view" property="collapsed">True</setter> - </object> - </child> - <property name="content"> - <object class="GtkStack" id="stack"> + <template class="DinoUiMainWindow" parent="GtkApplicationWindow"> + <property name="child"> + <object class="AdwBreakpointBin"> + <property name="width-request">360</property> + <property name="height-request">320</property> + <child> + <object class="AdwBreakpoint"> + <condition>max-width: 600sp</condition> + <setter object="navigation_split_view" property="collapsed">True</setter> + </object> + </child> + <property name="child"> + <object class="GtkStack" id="stack"> <child> <object class="GtkStackPage"> <property name="name">main</property> @@ -24,24 +28,21 @@ <property name="child"> <object class="AdwToolbarView"> <child type="top"> - <object class="AdwHeaderBar" id="header_bar"> - <property name="show-title">False</property> - <property name="hexpand">False</property> + <object class="GtkBox"> + <property name="spacing">6</property> + <property name="margin-start">6</property> + <property name="margin-end">6</property> <style> - <class name="dino-left"/> + <class name="toolbar"/> + <class name="dino-conversation-list-toolbar"/> </style> <child> - <object class="GtkMenuButton" id="add_button"> - <property name="has-frame">False</property> - <child> - <object class="GtkImage"> - <property name="icon-name">dino-list-add-symbolic</property> - <property name="icon-size">normal</property> - </object> - </child> + <object class="GtkSearchEntry" id="conversation_search_entry"> + <property name="hexpand">True</property> + <property name="placeholder-text" translatable="yes">Search conversations</property> </object> </child> - <child type="end"> + <child> <object class="GtkMenuButton" id="menu_button"> <property name="has-frame">False</property> <child> @@ -87,7 +88,7 @@ <property name="width_request">260</property> <property name="title" translatable="yes">You have no open chats</property> - <property name="description" translatable="yes">Click + to start a chat or join a channel</property> + <property name="description" translatable="yes">Use the menu to start a chat or join a channel</property> </object> </property> </object> @@ -108,6 +109,11 @@ <object class="AdwToolbarView"> <child type="top"> <object class="AdwHeaderBar" id="conversation_headerbar"> + <property name="show-start-title-buttons">False</property> + <property name="show-end-title-buttons">False</property> + <style> + <class name="dino-chat-headerbar"/> + </style> <property name="title-widget"> <object class="AdwWindowTitle" id="conversation_window_title" /> </property> @@ -185,6 +191,8 @@ </property> </object> </child> + </object> + </property> </object> </property> </template> diff --git a/main/data/main_window_placeholder.ui b/main/data/main_window_placeholder.ui index 123920fe..b9b72820 100644 --- a/main/data/main_window_placeholder.ui +++ b/main/data/main_window_placeholder.ui @@ -8,11 +8,6 @@ <property name="hexpand">True</property> <property name="vexpand">True</property> <child> - <object class="GtkHeaderBar"> - <property name="show-title-buttons">true</property> - </object> - </child> - <child> <object class="GtkBox"> <property name="orientation">vertical</property> <property name="valign">center</property> diff --git a/main/data/menu_add.ui b/main/data/menu_add.ui deleted file mode 100644 index c984e081..00000000 --- a/main/data/menu_add.ui +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<interface> - <menu id="menu_add"> - <section> - <item> - <attribute name="action">app.add_chat</attribute> - <attribute name="label" translatable="yes">Start Conversation</attribute> - </item> - <item> - <attribute name="action">app.add_conference</attribute> - <attribute name="label" translatable="yes">Join Channel</attribute> - </item> - </section> - </menu> -</interface> diff --git a/main/data/menu_app.ui b/main/data/menu_app.ui index 9b85634d..bbcddb6d 100644 --- a/main/data/menu_app.ui +++ b/main/data/menu_app.ui @@ -3,6 +3,16 @@ <menu id="menu_app"> <section> <item> + <attribute name="action">app.add_chat</attribute> + <attribute name="label" translatable="yes">Start Conversation</attribute> + </item> + <item> + <attribute name="action">app.add_conference</attribute> + <attribute name="label" translatable="yes">Join Channel</attribute> + </item> + </section> + <section> + <item> <attribute name="action">app.preferences</attribute> <attribute name="label" translatable="yes">Preferences</attribute> </item> diff --git a/main/data/style.css b/main/data/style.css index fc5915fb..64394cae 100644 --- a/main/data/style.css +++ b/main/data/style.css @@ -9,18 +9,18 @@ statuspage { opacity: 0.5; } -window.dino-main .dino-header-right { - background: @theme_base_color; +window.dino-main headerbar.dino-chat-headerbar { + min-height: 44px; } -window.dino-main .dino-header-left { - background: @insensitive_bg_color; +window.dino-main headerbar.dino-chat-headerbar > windowhandle > box { + padding-top: 5px; + padding-bottom: 5px; } -window.dino-main headerbar.dino-left label.title { - opacity: 0; - font-size: 0; - color: transparent; +window.dino-main .dino-conversation-list-toolbar { + padding-top: 5px; + padding-bottom: 5px; } window.dino-main .dino-conversation undershoot, diff --git a/main/src/main.vala b/main/src/main.vala index bf8759b6..4a6d31c7 100644 --- a/main/src/main.vala +++ b/main/src/main.vala @@ -14,6 +14,7 @@ void main(string[] args) { Intl.textdomain(GETTEXT_PACKAGE); internationalize(GETTEXT_PACKAGE, search_path_generator.get_locale_path(GETTEXT_PACKAGE, LOCALE_INSTALL_DIR)); + Environment.set_variable("GTK_CSD", "0", true); Gtk.init(); Dino.Ui.Application app = new Dino.Ui.Application() { search_path_generator=search_path_generator }; Plugins.Loader loader = new Plugins.Loader(app); 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); |
