Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Leboulanger <asterix@lagaule.org>2012-04-29 00:45:53 +0400
committerYann Leboulanger <asterix@lagaule.org>2012-04-29 00:45:53 +0400
commitf13debc29f37e5e197d350b879c7b31e5e6f8e71 (patch)
tree5f4278f2bcae8075a1f6bc320ad71f2bad123004
parent19fa55c957f6b2cd2629307479eba9ee8f95979a (diff)
improve roster drawing when we get many presences. Fixes #7125
-rw-r--r--src/roster_window.py36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/roster_window.py b/src/roster_window.py
index 560a7f08a..cbb3aee6e 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -1009,7 +1009,7 @@ class RosterWindow:
### Methods for adding and removing roster window items
################################################################################
- def draw_account(self, account):
+ def _really_draw_account(self, account):
child_iter = self._get_account_iter(account, self.model)
if not child_iter:
assert False, 'Account iter of %s could not be found.' % account
@@ -1073,9 +1073,21 @@ class RosterWindow:
asPixbufIcon()
else:
self.model[child_iter][C_LOCATION_PIXBUF] = None
+
+ def _really_draw_accounts(self):
+ for acct in self.accounts_to_draw:
+ self._really_draw_account(acct)
+ self.accounts_to_draw = []
return False
- def draw_group(self, group, account):
+ def draw_account(self, account):
+ if account in self.accounts_to_draw:
+ return
+ self.accounts_to_draw.append(account)
+ if len(self.accounts_to_draw) == 1:
+ gobject.timeout_add(200, self._really_draw_accounts)
+
+ def _really_draw_group(self, group, account):
child_iter = self._get_group_iter(group, account, model=self.model)
if not child_iter:
# Eg. We redraw groups after we removed a entitiy
@@ -1094,8 +1106,23 @@ class RosterWindow:
text += ' (%s/%s)' % (repr(nbr_on), repr(nbr_total))
self.model[child_iter][C_NAME] = text
+
+ def _really_draw_groups(self):
+ for ag in self.groups_to_draw.values():
+ acct = ag['account']
+ grp = ag['group']
+ self._really_draw_group(grp, acct)
+ self.groups_to_draw = {}
return False
+ def draw_group(self, group, account):
+ ag = account + group
+ if ag in self.groups_to_draw:
+ return
+ self.groups_to_draw[ag] = {'group': group, 'account': account}
+ if len(self.groups_to_draw) == 1:
+ gobject.timeout_add(200, self._really_draw_groups)
+
def draw_parent_contact(self, jid, account):
child_iters = self._get_contact_iter(jid, account, model=self.model)
if not child_iters:
@@ -6382,6 +6409,11 @@ class RosterWindow:
# it means we are waiting for this number of accounts to disconnect
# before quitting
self.quit_on_next_offline = -1
+
+ # groups to draw next time we draw groups.
+ self.groups_to_draw = {}
+ # accounts to draw next time we draw accounts.
+ self.accounts_to_draw = []
# uf_show, img, show, sensitive
liststore = gtk.ListStore(str, gtk.Image, str, bool)