changeset 618626c99460 in /home/hg/repos/gajim

branches: 
details:http://hg.gajim.org/gajim?cmd=changeset;node=618626c99460
description: load disco items slowly to now freeze with long list.

diffstat:

 src/disco.py |  33 +++++++++++++++++++++++----------
 1 files changed, 23 insertions(+), 10 deletions(-)

diffs (43 lines):

diff -r d24235f5c3e6 -r 618626c99460 src/disco.py
--- a/src/disco.py      Sun Jul 07 14:22:37 2013 +0200
+++ b/src/disco.py      Mon Jul 08 14:51:50 2013 +0200
@@ -1106,16 +1106,29 @@
 _('This service does not contain any items to browse.'))
             return
         # We got a list of items
-        self.window.services_treeview.set_model(None)
-        for item in items:
-            jid_ = item['jid']
-            node_ = item.get('node', '')
-            # If such an item is already here: don't add it
-            if self._find_item(jid_, node_):
-                continue
-            self._total_items += 1
-            self._add_item(jid_, node_, node, item, force)
-        self.window.services_treeview.set_model(self.model)
+        def fill_partial_rows(items):
+            '''Generator to fill the listmodel of a treeview progressively.'''
+            self.window.services_treeview.freeze_child_notify()
+            for item in items:
+                if self.window.dying:
+                    yield False
+                jid_ = item['jid']
+                node_ = item.get('node', '')
+                # If such an item is already here: don't add it
+                if self._find_item(jid_, node_):
+                    continue
+                self._total_items += 1
+                print 'adding item #', self._total_items
+                self._add_item(jid_, node_, node, item, force)
+                if (self._total_items % 10) == 0:
+                    self.window.services_treeview.thaw_child_notify()
+                    yield True
+                    self.window.services_treeview.freeze_child_notify()
+            self.window.services_treeview.thaw_child_notify()
+            #stop idle_add()
+            yield False
+        loader = fill_partial_rows(items)
+        gobject.idle_add(loader.next)
 
     def _agent_info(self, jid, node, identities, features, data):
         """
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to