aboutsummaryrefslogtreecommitdiff
path: root/main/src/ui/conversation_view_controller.vala
diff options
context:
space:
mode:
authorfiaxh <git@lightrise.org>2025-10-05 11:20:39 +0200
committerfiaxh <git@lightrise.org>2025-10-05 11:20:39 +0200
commit3f9318f83f75ee45ede07da4e617556421505eeb (patch)
treece783c258f9574cda7cb83f6e418a6cac5688007 /main/src/ui/conversation_view_controller.vala
parentd625058d76efc9e344dd5e1239a4b040a7d2519a (diff)
Use AdwNavigationSplitView instead of AdwLeaflet for main window
Diffstat (limited to 'main/src/ui/conversation_view_controller.vala')
-rw-r--r--main/src/ui/conversation_view_controller.vala60
1 files changed, 19 insertions, 41 deletions
diff --git a/main/src/ui/conversation_view_controller.vala b/main/src/ui/conversation_view_controller.vala
index 21459669..1662ae56 100644
--- a/main/src/ui/conversation_view_controller.vala
+++ b/main/src/ui/conversation_view_controller.vala
@@ -8,13 +8,10 @@ namespace Dino.Ui {
public class ConversationViewController : Object {
- public new string? conversation_display_name { get; set; }
- public string? conversation_topic { get; set; }
-
private Application app;
+ private MainWindow main_window;
private ConversationView view;
private Widget? overlay_dialog;
- private ConversationTitlebar titlebar;
public SearchMenuEntry search_menu_entry = new SearchMenuEntry();
public ListView list_view = new ListView(null, null);
private DropTarget drop_event_controller = new DropTarget(typeof(File), DragAction.COPY );
@@ -23,11 +20,13 @@ public class ConversationViewController : Object {
private StreamInteractor stream_interactor;
private Conversation? conversation;
+ private Binding? display_name_binding = null;
+
private const string[] KEY_COMBINATION_CLOSE_CONVERSATION = {"<Ctrl>W", null};
- public ConversationViewController(ConversationView view, ConversationTitlebar titlebar, StreamInteractor stream_interactor) {
+ public ConversationViewController(MainWindow main_window, ConversationView view, StreamInteractor stream_interactor) {
+ this.main_window = main_window;
this.view = view;
- this.titlebar = titlebar;
this.stream_interactor = stream_interactor;
this.app = GLib.Application.get_default() as Application;
@@ -52,7 +51,7 @@ public class ConversationViewController : Object {
var key_controller3 = new EventControllerKey() { name = "dino-forward-to-input-key-events-3" };
key_controller3.key_pressed.connect(forward_key_press_to_chat_input);
- titlebar.get_widget().add_controller(key_controller3);
+ main_window.conversation_headerbar.add_controller(key_controller3);
// goto-end floating button
var vadjustment = view.conversation_frame.scrolled.vadjustment;
@@ -65,29 +64,12 @@ public class ConversationViewController : Object {
view.conversation_frame.initialize_for_conversation(conversation);
});
- // Update conversation display name & topic
- this.bind_property("conversation-display-name", titlebar, "title");
- this.bind_property("conversation-topic", titlebar, "subtitle");
- stream_interactor.get_module(MucManager.IDENTITY).room_info_updated.connect((account, jid) => {
- if (conversation != null && conversation.counterpart.equals_bare(jid) && conversation.account.equals(account)) {
- update_conversation_display_name();
- }
- });
- stream_interactor.get_module(MucManager.IDENTITY).private_room_occupant_updated.connect((account, room, occupant) => {
- if (conversation != null && conversation.counterpart.equals_bare(room.bare_jid) && conversation.account.equals(account)) {
- update_conversation_display_name();
- }
- });
+ // Update conversation topic
stream_interactor.get_module(MucManager.IDENTITY).subject_set.connect((account, jid, subject) => {
if (conversation != null && conversation.counterpart.equals_bare(jid) && conversation.account.equals(account)) {
update_conversation_topic(subject);
}
});
- stream_interactor.get_module(RosterManager.IDENTITY).updated_roster_item.connect((account, jid, roster_item) => {
- if (conversation != null && conversation.account.equals(account) && conversation.counterpart.equals(jid)) {
- update_conversation_display_name();
- }
- });
stream_interactor.get_module(FileManager.IDENTITY).upload_available.connect(update_file_upload_status);
@@ -101,7 +83,7 @@ public class ConversationViewController : Object {
if (button == null) {
continue;
}
- titlebar.insert_button(button);
+ main_window.conversation_headerbar.pack_end(button);
}
Shortcut shortcut = new Shortcut(new KeyvalTrigger(Key.U, ModifierType.CONTROL_MASK), new CallbackAction(() => {
@@ -144,7 +126,10 @@ public class ConversationViewController : Object {
chat_input_controller.set_conversation(conversation);
- update_conversation_display_name();
+ if (display_name_binding != null) display_name_binding.unbind();
+ var display_name_model = stream_interactor.get_module(ContactModels.IDENTITY).get_display_name_model(conversation);
+ display_name_binding = display_name_model.bind_property("display-name", main_window.conversation_window_title, "title", BindingFlags.SYNC_CREATE);
+
update_conversation_topic();
foreach(Plugins.ConversationTitlebarEntry e in this.app.plugin_registry.conversation_titlebar_entries) {
@@ -159,8 +144,8 @@ public class ConversationViewController : Object {
}
public void unset_conversation() {
- conversation_display_name = null;
- conversation_topic = null;
+ main_window.conversation_window_title.title = null;
+ main_window.conversation_window_title.subtitle = null;
}
private async void update_file_upload_status() {
@@ -180,25 +165,18 @@ public class ConversationViewController : Object {
}
}
- private void update_conversation_display_name() {
- conversation_display_name = Util.get_conversation_display_name(stream_interactor, conversation);
- }
-
private void update_conversation_topic(string? subtitle = null) {
+ string? str = null;
if (subtitle != null) {
- string summarized_topic = Util.summarize_whitespaces_to_space(subtitle);
- conversation_topic = Util.parse_add_markup(summarized_topic, null, true, true);
+ str = Util.summarize_whitespaces_to_space(subtitle);
} else if (conversation.type_ == Conversation.Type.GROUPCHAT) {
string? subject = stream_interactor.get_module(MucManager.IDENTITY).get_groupchat_subject(conversation.counterpart, conversation.account);
if (subject != null) {
- string summarized_topic = Util.summarize_whitespaces_to_space(subject);
- conversation_topic = Util.parse_add_markup(summarized_topic, null, true, true);
- } else {
- conversation_topic = null;
+ str = Util.summarize_whitespaces_to_space(subject);
}
- } else {
- conversation_topic = null;
}
+
+ main_window.conversation_window_title.subtitle = str;
}
private async void on_clipboard_paste() {