diff options
Diffstat (limited to 'main/src/ui/conversation_view_controller.vala')
| -rw-r--r-- | main/src/ui/conversation_view_controller.vala | 60 |
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() { |
