From fdb63d1c161ff951969244906a77be016d9b2f02 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Sun, 9 Aug 2009 12:57:26 +0100
Subject: Fix segfault when Roster items are removed.


diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
index 1b77b26..2c3b4b2 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
+++ b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
@@ -38,8 +38,8 @@ void QtTreeWidgetItem::setBackgroundColor(unsigned long color) {
 	 					(color & 0xFF));
 }
 
-void QtTreeWidgetItem::setExpanded(bool b) {
-	expanded_ = true;
+void QtTreeWidgetItem::setExpanded(bool expanded) {
+	expanded_ = expanded;
 	emit changed(this);
 }
 
@@ -70,6 +70,7 @@ QWidget* QtTreeWidgetItem::getExpandedRosterWidget() {
 }
 
 QtTreeWidgetItem::~QtTreeWidgetItem() {
+	parent_->removeChild(this);
 	qDeleteAll(children_);
 }
 
@@ -83,6 +84,11 @@ void QtTreeWidgetItem::addChild(QtTreeWidgetItem* child) {
 	handleChanged(child);
 }
 
+void QtTreeWidgetItem::removeChild(QtTreeWidgetItem* child) {
+	children_.removeAll(child);
+	handleChanged(this);
+}
+
 void QtTreeWidgetItem::handleChanged(QtTreeWidgetItem* child) {
 	shownChildren_.clear();
 	for (int i = 0; i < children_.size(); i++) {
diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.h b/Swift/QtUI/Roster/QtTreeWidgetItem.h
index 73da92f..20e6f5d 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetItem.h
+++ b/Swift/QtUI/Roster/QtTreeWidgetItem.h
@@ -26,6 +26,7 @@ class QtTreeWidgetItem : public QObject, public TreeWidgetItem {
 	public:
 			~QtTreeWidgetItem();
 			void addChild(QtTreeWidgetItem* child);
+			void removeChild(QtTreeWidgetItem* child);
 			QtTreeWidgetItem* getParentItem();
 			int rowCount();
 			int rowOf(QtTreeWidgetItem* item);
-- 
cgit v0.10.2-6-g49f6