From 65ba840cbdda131a7dab6c911af976cbdab5b598 Mon Sep 17 00:00:00 2001 From: Stephan Erb Date: Mon, 28 Dec 2009 20:14:15 +0100 Subject: [PATCH] Slightly faster version of get_contact_iter and get_role_iter. --- src/groupchat_control.py | 33 ++++++++++----------------------- src/roster_window.py | 6 +++--- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 002881357..5a5d7749e 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -122,6 +122,7 @@ def tree_cell_data_func(column, renderer, model, iter_, tv=None): renderer.set_property('font', gtkgui_helpers.get_theme_font_for_option(theme, 'groupfont')) + class PrivateChatControl(ChatControl): TYPE_ID = message_control.TYPE_PM @@ -829,24 +830,15 @@ class GroupchatControl(ChatControlBase): def get_contact_iter(self, nick): model = self.list_treeview.get_model() - fin = False role_iter = model.get_iter_root() - if not role_iter: - return None - while not fin: - fin2 = False + while role_iter: user_iter = model.iter_children(role_iter) - if not user_iter: - fin2 = True - while not fin2: + while user_iter: if nick == model[user_iter][C_NICK].decode('utf-8'): return user_iter - user_iter = model.iter_next(user_iter) - if not user_iter: - fin2 = True + else: + user_iter = model.iter_next(user_iter) role_iter = model.iter_next(role_iter) - if not role_iter: - fin = True return None def print_old_conversation(self, text, contact='', tim=None, xhtml = None): @@ -1528,17 +1520,12 @@ class GroupchatControl(ChatControlBase): def get_role_iter(self, role): model = self.list_treeview.get_model() - fin = False - iter_ = model.get_iter_root() - if not iter_: - return None - while not fin: - role_name = model[iter_][C_NICK].decode('utf-8') + role_iter = model.get_iter_root() + while role_iter: + role_name = model[role_iter][C_NICK].decode('utf-8') if role == role_name: - return iter_ - iter_ = model.iter_next(iter_) - if not iter_: - fin = True + return role_iter + role_iter = model.iter_next(role_iter) return None def remove_contact(self, nick): diff --git a/src/roster_window.py b/src/roster_window.py index 7395a307e..49aa14b5b 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -312,7 +312,6 @@ class RosterWindow: self.tree.freeze_child_notify() for jid in jids: self.add_contact(jid, account) - self.tree.thaw_child_notify() # Do not freeze the GUI when drawing the contacts if jids: @@ -323,6 +322,8 @@ class RosterWindow: for group in gajim.groups[account]: self.draw_group(group, account) self.draw_account(account) + + self.tree.thaw_child_notify() self.starting = False @@ -1291,8 +1292,7 @@ class RosterWindow: iters = self._get_contact_iter(jid, account, model=self.model) if not iters: return - jid = self.model[iters[0]][C_JID] - jid = jid.decode('utf-8') + jid = self.model[iters[0]][C_JID].decode('utf-8') contact = gajim.contacts.get_contact(account, jid) if pep_type in contact.pep: pixbuf = contact.pep[pep_type].asPixbufIcon()