diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java index 1f552e68c..07c69a9af 100644 --- a/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java +++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/TreeContactList.java @@ -224,7 +224,7 @@ public void metaContactGroupAdded(MetaContactGroupEvent evt) = MetaContactListSource.createUIGroup(metaGroup); if (currentFilter.isMatching(uiGroup)) - addGroup(uiGroup); + addGroup(uiGroup, true); else MetaContactListSource.removeUIGroup(metaGroup); } @@ -575,7 +575,7 @@ public void metaContactReceived(MetaContact metaContact) public void metaGroupReceived(MetaContactGroup metaGroup) { GuiActivator.getContactList().addGroup( - MetaContactListSource.createUIGroup(metaGroup)); + MetaContactListSource.createUIGroup(metaGroup), true); } /** @@ -702,7 +702,10 @@ public void run() { GroupNode parentNode = treeModel.getRoot(); - groupNode = parentNode.sortedAddContactGroup(group); + if (isSorted) + groupNode = parentNode.sortedAddContactGroup(group); + else + groupNode = parentNode.addContactGroup(group); } } @@ -751,18 +754,22 @@ public void run() parentGroupNode.removeContact(contact); // If the parent group is empty remove it. - if (parentGroupNode.getChildCount() < 1 - && parentGroupNode.getParent() != null) + if (parentGroupNode.getChildCount() == 0) { - treeModel.removeNodeFromParent(parentGroupNode); + GroupNode parent = (GroupNode) parentGroupNode.getParent(); + + if (parent != null) + parent.removeContactGroup(parentGroup); } } /** * Adds the given group to this list. * @param group the UIGroup to add + * @param isSorted indicates if the contact should be sorted regarding to + * the GroupNode policy */ - public void addGroup(final UIGroup group) + public void addGroup(final UIGroup group, final boolean isSorted) { if (!SwingUtilities.isEventDispatchThread()) { @@ -770,7 +777,7 @@ public void addGroup(final UIGroup group) { public void run() { - addGroup(group); + addGroup(group, isSorted); } }); return; @@ -778,7 +785,10 @@ public void run() GroupNode parentNode = treeModel.getRoot(); - parentNode.sortedAddContactGroup(group); + if (isSorted) + parentNode.sortedAddContactGroup(group); + else + parentNode.addContactGroup(group); expandGroup(treeModel.getRoot()); } @@ -813,8 +823,13 @@ public void run() parentGroupNode.removeContactGroup(group); // If the parent group is empty remove it. - if (parentGroupNode.getChildCount() < 1) - treeModel.removeNodeFromParent(parentGroupNode); + if (parentGroupNode.getChildCount() == 0) + { + GroupNode parent = (GroupNode) parentGroupNode.getParent(); + + if (parent != null) + parent.removeContactGroup(parentGroup); + } } /**