From 65ba840cbdda131a7dab6c911af976cbdab5b598 Mon Sep 17 00:00:00 2001
From: Stephan Erb <steve-e@h3c.de>
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 0028813577..5a5d7749e9 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 7395a307e9..49aa14b5b8 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()
-- 
GitLab