From 4c442f625390859afa9739c522a58b352088a470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bellegarde?= Date: Wed, 4 Oct 2023 17:29:57 +0200 Subject: [PATCH] client: Ensure conversation is loaded before replying --- .../application/application-main-window.vala | 20 ++++++++++++++++--- .../conversation-list-view.vala | 12 +++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/client/application/application-main-window.vala b/src/client/application/application-main-window.vala index 92ed7f1c..d1e19d9c 100644 --- a/src/client/application/application-main-window.vala +++ b/src/client/application/application-main-window.vala @@ -2065,6 +2065,20 @@ public class Application.MainWindow : } } + private void reply_conversation(Composer.Widget.ContextType context_type) { + if (this.outer_leaflet.folded) { + this.conversation_list_view.activate_selected(); + navigate_next_pane(); + // This is a lot of async actions, delay composer creation + GLib.Timeout.add(500, () => { + this.create_composer_from_viewer.begin(context_type); + return Source.REMOVE; + }); + } else { + this.create_composer_from_viewer.begin(context_type); + } + } + private void on_scan_completed(Geary.App.ConversationMonitor monitor) { // Done scanning. Check if we have enough messages to fill // the conversation list; if not, trigger a load_more(); @@ -2405,15 +2419,15 @@ public class Application.MainWindow : } private void on_reply_conversation() { - this.create_composer_from_viewer.begin(REPLY_SENDER); + reply_conversation(REPLY_SENDER); } private void on_reply_all_conversation() { - this.create_composer_from_viewer.begin(REPLY_ALL); + reply_conversation(REPLY_ALL); } private void on_forward_conversation() { - this.create_composer_from_viewer.begin(FORWARD); + reply_conversation(FORWARD); } private void on_show_window_menu() { diff --git a/src/client/conversation-list/conversation-list-view.vala b/src/client/conversation-list/conversation-list-view.vala index f4cf0258..2db55d3e 100644 --- a/src/client/conversation-list/conversation-list-view.vala +++ b/src/client/conversation-list/conversation-list-view.vala @@ -356,6 +356,18 @@ public class ConversationList.View : Gtk.ScrolledWindow, Geary.BaseInterface { }); } + /** + * Activate currently selected row + * + * If more than one selected, activate the first one + */ + public void activate_selected() { + Gee.Set conversations = get_selected_conversations(); + if (!conversations.is_empty) { + conversation_activated(conversations.to_array()[0], 1); + } + } + /** * Selects all conversations */