diff options
Diffstat (limited to 'Swiften/Roster/GroupRosterItem.cpp')
| -rw-r--r-- | Swiften/Roster/GroupRosterItem.cpp | 23 | 
1 files changed, 21 insertions, 2 deletions
| diff --git a/Swiften/Roster/GroupRosterItem.cpp b/Swiften/Roster/GroupRosterItem.cpp index b55ce17..2632444 100644 --- a/Swiften/Roster/GroupRosterItem.cpp +++ b/Swiften/Roster/GroupRosterItem.cpp @@ -7,6 +7,7 @@  #include "Swiften/Roster/GroupRosterItem.h"  #include <boost/bind.hpp> +//#include <boost/algorithm.hpp>  #include <iostream>  namespace Swift { @@ -33,6 +34,8 @@ void GroupRosterItem::addChild(RosterItem* item) {  	GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item);  	if (group) {  		group->onChildrenChanged.connect(boost::bind(&GroupRosterItem::handleChildrenChanged, this, group)); +	} else { +		item->onDataChanged.connect(boost::bind(&GroupRosterItem::handleDataChanged, this, item));  	}  	onChildrenChanged();  	onDataChanged(); @@ -68,8 +71,17 @@ ContactRosterItem* GroupRosterItem::removeChild(const JID& jid) {  	return removed;  } -void GroupRosterItem::sortDisplayed() { -	std::stable_sort(displayedChildren_.begin(), displayedChildren_.end(), itemLessThan); +/** + * Returns false if the list didn't need a resort + */ +bool GroupRosterItem::sortDisplayed() { +	/* Not doing this until we import boost::algorithm*/ +//	if (boost::is_sorted(displayedChildren_begin(), displayedChildren_.end(), itemLessThan)) { +//		return false; +//	} +	//Sholudn't need stable_sort here +	std::sort(displayedChildren_.begin(), displayedChildren_.end(), itemLessThan); +	return true;  }  bool GroupRosterItem::itemLessThan(const RosterItem* left, const RosterItem* right) { @@ -90,6 +102,7 @@ bool GroupRosterItem::itemLessThan(const RosterItem* left, const RosterItem* rig  		if (rightContact) {  			return true;  		} +//		std::cout << "Comparing groups " << left->getSortableDisplayName() << " and " << right->getSortableDisplayName() << std::endl;  		return left->getSortableDisplayName() < right->getSortableDisplayName();  	}  } @@ -114,6 +127,12 @@ void GroupRosterItem::setDisplayed(RosterItem* item, bool displayed) {  	onChildrenChanged();  } +void GroupRosterItem::handleDataChanged(RosterItem* /*item*/) { +	if (sortDisplayed()) { +		onChildrenChanged(); +	} +} +  void GroupRosterItem::handleChildrenChanged(GroupRosterItem* group) {  	size_t oldSize = getDisplayedChildren().size();  	if (group->getDisplayedChildren().size() > 0) { | 
 Swift
 Swift