From c061f286915bdffa93d4dc722764eae1636291cc Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Sun, 11 Oct 2009 22:35:54 +0100
Subject: Fix for segfault on exit with open MUCs, and reinstate roster
 sorting.


diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index 3da0f8d..102fe63 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -62,6 +62,10 @@ QtChatWindow::QtChatWindow(const QString &contact, QtTreeWidgetFactory *treeWidg
 	resize(400,300);
 }
 
+QtChatWindow::~QtChatWindow() {
+
+}
+
 TreeWidget* QtChatWindow::getTreeWidget() {
 	return treeWidget_;
 }
diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h
index 8a07de3..9c41ddc 100644
--- a/Swift/QtUI/QtChatWindow.h
+++ b/Swift/QtUI/QtChatWindow.h
@@ -19,6 +19,7 @@ namespace Swift {
 		Q_OBJECT
 		public:
 			QtChatWindow(const QString &contact, QtTreeWidgetFactory* treeWidgetFactory);
+			~QtChatWindow();
 			void addMessage(const String &message, const String &senderName, bool senderIsSelf, const boost::optional<SecurityLabel>& label, const String& avatarPath);
 			void addSystemMessage(const String& message);
 			void addErrorMessage(const String& errorMessage);
diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
index b237929..1f2964e 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
+++ b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
@@ -121,7 +121,7 @@ void QtTreeWidgetItem::removeChild(QtTreeWidgetItem* child) {
 }
 
 void bubbleSort(QList<QtTreeWidgetItem*>& list) {
-	bool done = true;
+	bool done = false;
 	for (int i = 0; i < list.size() - 1 && !done; i++) {
 		done = true;
 		for (int j = i + 1; j < list.size(); j++) {
diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp
index 8a319ea..568c1f5 100644
--- a/Swift/QtUI/Roster/RosterModel.cpp
+++ b/Swift/QtUI/Roster/RosterModel.cpp
@@ -58,7 +58,8 @@ QModelIndex RosterModel::parent(const QModelIndex& index) const {
 	Q_ASSERT(item);
 
 	QtTreeWidgetItem* parentItem = item->getParentItem();
-	return parentItem == tree_ ? QModelIndex() : createIndex(parentItem->row(), 0, parentItem);
+	/* parentItem_ == NULL can happen during destruction.*/
+	return parentItem == tree_ || parentItem == NULL ? QModelIndex() : createIndex(parentItem->row(), 0, parentItem);
 
 }
 
-- 
cgit v0.10.2-6-g49f6