From 12c54d9c1738e7c80b56d4c07ab5021ac6965f7e Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Tue, 6 Jan 2009 11:13:10 +0000
Subject: [PATCH] remember which metacontacts were collapsed / expanded and
 restore their states. Fixes #4618

---
 src/roster_window.py | 35 +++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/roster_window.py b/src/roster_window.py
index 8416ba56dd..ea2cbfcd32 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -1407,6 +1407,19 @@ class RosterWindow:
 			self.tree.expand_row(path, False)
 		return False
 
+	def _adjust_contact_expand_collapse_state(self, jid, account):
+		'''Expand/collapse group row based on self.collapsed_rows'''
+		iterC = self._get_contact_iter(jid, account)
+		if not iterC:
+			# Contact not visible
+			return
+		path = self.modelfilter.get_path(iterC)
+		if account + group in self.collapsed_rows:
+			self.tree.collapse_row(path)
+		else:
+			self.tree.expand_row(path, False)
+		return False
+
 ##############################################################################
 ### Roster and Modelfilter handling
 ##############################################################################
@@ -3498,6 +3511,16 @@ class RosterWindow:
 					gajim.groups[account][group]['expand'] = True
 					if account + group in self.collapsed_rows:
 						self.collapsed_rows.remove(account + group)
+				for contact in gajim.contacts.iter_contacts(account):
+					jid = contact.jid
+					print contact.jid, group, gajim.contacts.is_big_brother(account, contact.jid, accounts), self.collapsed_rows
+					if group in contact.groups and gajim.contacts.is_big_brother(
+					account, jid, accounts) and account + group + jid \
+					not in self.collapsed_rows:
+						titers = self._get_contact_iter(jid, account)
+						for titer in titers:
+							path = model.get_path(titer)
+							self.tree.expand_row(path, False)
 		elif type_ == 'account':
 			account = accounts[0] # There is only one cause we don't use merge
 			if account in self.collapsed_rows:
@@ -3514,6 +3537,10 @@ class RosterWindow:
 			# Metacontact got toggled, update icon
 			jid = model[titer][C_JID].decode('utf-8')
 			account = model[titer][C_ACCOUNT].decode('utf-8')
+			contact = gajim.contacts.get_contact(account, jid)
+			for group in contact.groups:
+				if account + group + jid in self.collapsed_rows:
+					self.collapsed_rows.append(account + group + jid)
 			family = gajim.contacts.get_metacontacts_family(account, jid)
 			nearby_family = \
 				self._get_nearby_family_and_big_brother(family, account)[0]
@@ -3543,17 +3570,21 @@ class RosterWindow:
 			for account in accounts:
 				if group in gajim.groups[account]: # This account has this group
 					gajim.groups[account][group]['expand'] = False
-					if not account + group in self.collapsed_rows:
+					if account + group not in self.collapsed_rows:
 						self.collapsed_rows.append(account + group)
 		elif type_ == 'account':
 			account = accounts[0] # There is only one cause we don't use merge
-			if not account in self.collapsed_rows:
+			if account not in self.collapsed_rows:
 				self.collapsed_rows.append(account)
 			self.draw_account(account)
 		elif type_ == 'contact':
 			# Metacontact got toggled, update icon
 			jid = model[titer][C_JID].decode('utf-8')
 			account = model[titer][C_ACCOUNT].decode('utf-8')
+			contact = gajim.contacts.get_contact(account, jid)
+			for group in contact.groups:
+				if account + group + jid not in self.collapsed_rows:
+					self.collapsed_rows.append(account + group + jid)
 			family = gajim.contacts.get_metacontacts_family(account, jid)
 			nearby_family  = \
 				self._get_nearby_family_and_big_brother(family, account)[0]
-- 
GitLab