From 8c243eab43c81316d74d4220d3ec7967270d575c Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Fri, 15 Sep 2006 09:22:52 +0000
Subject: [PATCH] correctly change chat control/window account name when we
 change it. Fixes #2369

---
 src/config.py         |  3 +--
 src/message_window.py | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/config.py b/src/config.py
index dd8e7bce38..f641a869a6 100644
--- a/src/config.py
+++ b/src/config.py
@@ -1358,8 +1358,7 @@ class AccountModificationWindow:
 			gajim.events.change_account_name(self.account, name)
 
 			# change account variable for chat / gc controls
-			for ctrl in gajim.interface.msg_win_mgr.get_controls():
-				ctrl.account = name
+			gajim.interface.msg_win_mgr.change_account_name(self.account, name)
 			# upgrade account variable in opened windows
 			for kind in ('infos', 'disco', 'gc_config'):
 				for j in gajim.interface.instances[name][kind]:
diff --git a/src/message_window.py b/src/message_window.py
index f190956c8a..42be57e1cf 100644
--- a/src/message_window.py
+++ b/src/message_window.py
@@ -104,6 +104,16 @@ class MessageWindow:
 		self.notebook.drag_dest_set(gtk.DEST_DEFAULT_ALL, self.DND_TARGETS,
 			gtk.gdk.ACTION_MOVE)
 
+	def change_account_name(self, old_name, new_name):
+		if self._controls.has_key(old_name):
+			self._controls[new_name] = self._controls[old_name]
+			del self._controls[old_name]
+		for ctrl in self.controls():
+			if ctrl.account == old_name:
+				ctrl.account = new_name
+		if self.account == old_name:
+			self.account = new_name
+
 	def get_num_controls(self):
 		n = 0
 		for dict in self._controls.values():
@@ -618,7 +628,11 @@ class MessageWindowMgr:
 		# Map the mode to a int constant for frequent compares
 		mode = gajim.config.get('one_message_window')
 		self.mode = common.config.opt_one_window_types.index(mode)
-	
+
+	def change_account_name(self, old_name, new_name):
+		for win in self.windows():
+			win.change_account_name(old_name, new_name)
+
 	def _new_window(self, acct, type):
 		win = MessageWindow(acct, type)
 		# we track the lifetime of this window
-- 
GitLab