[geary] Replace ConversationListStore's conversation_add signal pair with one.



commit 1af9c6c7aa155e858a54b59a13fc2175353a0f2d
Author: Michael James Gratton <mike vee net>
Date:   Thu Oct 20 16:29:19 2016 +1100

    Replace ConversationListStore's conversation_add signal pair with one.
    
    This makes the added signal work in the same way as the new removed
    signal.

 .../conversation-list/conversation-list-store.vala |    9 ++--
 .../conversation-list/conversation-list-view.vala  |   52 +++++++------------
 2 files changed, 23 insertions(+), 38 deletions(-)
---
diff --git a/src/client/conversation-list/conversation-list-store.vala 
b/src/client/conversation-list/conversation-list-store.vala
index 7c3bc69..8ba37b3 100644
--- a/src/client/conversation-list/conversation-list-store.vala
+++ b/src/client/conversation-list/conversation-list-store.vala
@@ -90,9 +90,8 @@ public class ConversationListStore : Gtk.ListStore {
     private bool loading_local_only = true;
     private Geary.Nonblocking.Mutex refresh_mutex = new Geary.Nonblocking.Mutex();
     private uint update_id = 0;
-    
-    public signal void conversations_added_began();
-    public signal void conversations_added_finished();
+
+    public signal void conversations_added(bool start);
     public signal void conversations_removed(bool start);
 
     public ConversationListStore(Geary.App.ConversationMonitor conversations) {
@@ -415,7 +414,7 @@ public class ConversationListStore : Gtk.ListStore {
         if (conversations.size == 0)
             return;
         
-        conversations_added_began();
+        conversations_added(true);
         
         debug("Adding %d conversations.", conversations.size);
         int added = 0;
@@ -425,7 +424,7 @@ public class ConversationListStore : Gtk.ListStore {
         }
         debug("Added %d/%d conversations.", added, conversations.size);
         
-        conversations_added_finished();
+        conversations_added(false);
     }
     
     private void on_conversations_removed(Gee.Collection<Geary.App.Conversation> conversations) {
diff --git a/src/client/conversation-list/conversation-list-view.vala 
b/src/client/conversation-list/conversation-list-view.vala
index 20366ea..fdacaa1 100644
--- a/src/client/conversation-list/conversation-list-view.vala
+++ b/src/client/conversation-list/conversation-list-view.vala
@@ -78,12 +78,7 @@ public class ConversationListView : Gtk.TreeView {
     public new void set_model(ConversationListStore? new_store) {
         ConversationListStore? old_store = get_model();
         if (old_store != null) {
-            old_store.conversations_added_finished.disconnect(
-                on_conversations_added_finished
-            );
-            old_store.conversations_added_began.disconnect(
-                on_conversations_added_began
-            );
+            old_store.conversations_added.disconnect(on_conversations_added);
             old_store.conversations_removed.disconnect(on_conversations_removed);
             old_store.row_inserted.disconnect(on_rows_changed);
             old_store.rows_reordered.disconnect(on_rows_changed);
@@ -98,13 +93,8 @@ public class ConversationListView : Gtk.TreeView {
             new_store.row_changed.connect(on_rows_changed);
             new_store.row_deleted.connect(on_rows_changed);
             new_store.row_deleted.connect(on_row_deleted);
-            new_store.conversations_added_began.connect(
-                on_conversations_added_began
-            );
-            new_store.conversations_added_finished.connect(
-                on_conversations_added_finished
-            );
             new_store.conversations_removed.connect(on_conversations_removed);
+            new_store.conversations_added.connect(on_conversations_added);
         }
 
         // Disconnect the selection handler since we don't want to
@@ -174,27 +164,23 @@ public class ConversationListView : Gtk.TreeView {
         }
     }
 
-    private void on_conversations_added_began() {
+    private void on_conversations_added(bool start) {
         Gtk.Adjustment? adjustment = get_adjustment();
-        // If we were at the top, we want to stay there after conversations are added.
-        reset_adjustment = adjustment != null && adjustment.get_value() == 0;
-    }
-    
-    private void on_conversations_added_finished() {
-        if (!reset_adjustment)
-            return;
-        
-        // Pump the loop to make sure the new conversations are taking up space
-        // in the window.  Without this, setting the adjustment here is a no-op
-        // because as far as it's concerned, it's already at the top.
-        while (Gtk.events_pending())
-            Gtk.main_iteration();
-        
-        Gtk.Adjustment? adjustment = get_adjustment();
-        if (adjustment == null)
-            return;
-        
-        adjustment.set_value(0);
+        if (start) {
+            // If we were at the top, we want to stay there after
+            // conversations are added.
+            this.reset_adjustment = adjustment != null && adjustment.get_value() == 0;
+        } else if (this.reset_adjustment && adjustment != null) {
+            // Pump the loop to make sure the new conversations are
+            // taking up space in the window.  Without this, setting
+            // the adjustment here is a no-op because as far as it's
+            // concerned, it's already at the top.
+            while (Gtk.events_pending())
+                Gtk.main_iteration();
+
+            adjustment.set_value(0);
+        }
+        this.reset_adjustment = false;
     }
 
     private void on_conversations_removed(bool start) {
@@ -405,7 +391,7 @@ public class ConversationListView : Gtk.TreeView {
     // doing the same things (in particular, I/O) multiple times
     private void do_selection_changed() {
         Gee.HashSet<Geary.App.Conversation> new_selection =
-        new Gee.HashSet<Geary.App.Conversation>();
+            new Gee.HashSet<Geary.App.Conversation>();
         List<Gtk.TreePath> paths = get_all_selected_paths();
         if (paths.length() != 0) {
             // Conversations are selected, so collect them and


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