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