[geary/wip/730682-refine-convo-list] Ensure preview loader gets cancelled when main window's folder changes.



commit dbb14401d11a3165fdeeeb0ec5dfa2302342f126
Author: Michael James Gratton <mike vee net>
Date:   Fri Jan 5 16:10:08 2018 +1100

    Ensure preview loader gets cancelled when main window's folder changes.

 src/client/components/main-window.vala             |    4 ++--
 .../conversation-list/conversation-list.vala       |    5 +++--
 src/client/conversation-list/preview-loader.vala   |    2 ++
 3 files changed, 7 insertions(+), 4 deletions(-)
---
diff --git a/src/client/components/main-window.vala b/src/client/components/main-window.vala
index 2226276..50661e4 100644
--- a/src/client/components/main-window.vala
+++ b/src/client/components/main-window.vala
@@ -746,6 +746,7 @@ public class MainWindow : Gtk.ApplicationWindow {
             folder, folder.get_support_types()
         );
         this.highlighted_policy = null;
+        this.load_cancellable = new Cancellable();
 
         // Set up a new conversation monitor for the folder
         Geary.App.ConversationMonitor monitor = new Geary.App.ConversationMonitor(
@@ -764,7 +765,7 @@ public class MainWindow : Gtk.ApplicationWindow {
         monitor.email_flags_changed.connect(on_conversation_flags_changed);
 
         this.current_conversations = monitor;
-        this.conversation_list.bind_model(monitor);
+        this.conversation_list.bind_model(monitor, this.load_cancellable);
 
         // Update the UI
         this.conversation_list_actions.set_account(folder.account);
@@ -778,7 +779,6 @@ public class MainWindow : Gtk.ApplicationWindow {
         this.progress_monitor.add(this.conversation_list.model.previews.progress);
 
         // Finally, start the folder loading
-        this.load_cancellable = new Cancellable();
         monitor.start_monitoring_async.begin(this.load_cancellable);
         this.conversation_list.thaw_selection();
     }
diff --git a/src/client/conversation-list/conversation-list.vala 
b/src/client/conversation-list/conversation-list.vala
index 27ee235..704d000 100644
--- a/src/client/conversation-list/conversation-list.vala
+++ b/src/client/conversation-list/conversation-list.vala
@@ -164,10 +164,11 @@ public class ConversationList : Gtk.ListBox {
         return this.marked.keys.read_only_view;
     }
 
-    public new void bind_model(Geary.App.ConversationMonitor monitor) {
+    public new void bind_model(Geary.App.ConversationMonitor monitor,
+                               Cancellable cancellable) {
         Geary.Folder displayed = monitor.base_folder;
         Geary.App.EmailStore store = new Geary.App.EmailStore(displayed.account);
-        PreviewLoader loader = new PreviewLoader(store, new Cancellable()); // XXX
+        PreviewLoader loader = new PreviewLoader(store, cancellable);
 
         monitor.scan_started.connect(on_scan_started);
         monitor.scan_completed.connect(on_scan_completed);
diff --git a/src/client/conversation-list/preview-loader.vala 
b/src/client/conversation-list/preview-loader.vala
index b840582..356543d 100644
--- a/src/client/conversation-list/preview-loader.vala
+++ b/src/client/conversation-list/preview-loader.vala
@@ -56,6 +56,8 @@ public class PreviewLoader : Geary.BaseObject {
         this.load_timer = new Geary.TimeoutManager.seconds(
             1, () => { this.do_load.begin(); }
         );
+
+        cancellable.cancelled.connect(() => { this.load_timer.reset(); });
     }
 
     ~PreviewLoader() {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]