summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2009-08-09 14:37:57 (GMT)
committerKevin Smith <git@kismith.co.uk>2009-08-09 14:37:57 (GMT)
commitb589aa3732712c31da44523fa60fc5c4bc92ea9b (patch)
tree8874c488a7d3f40669a69276dcbbdebb2fa3cd97 /Swift/QtUI
parentfdb63d1c161ff951969244906a77be016d9b2f02 (diff)
downloadswift-contrib-b589aa3732712c31da44523fa60fc5c4bc92ea9b.zip
swift-contrib-b589aa3732712c31da44523fa60fc5c4bc92ea9b.tar.bz2
Fix long-standing bug with a crash on quit after joining MUCs.
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/Roster/QtTreeWidgetItem.cpp21
-rw-r--r--Swift/QtUI/Roster/QtTreeWidgetItem.h1
2 files changed, 18 insertions, 4 deletions
diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
index 2c3b4b2..51784df 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
+++ b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp
@@ -59,19 +59,32 @@ bool QtTreeWidgetItem::isShown() {
QWidget* QtTreeWidgetItem::getCollapsedRosterWidget() {
QWidget* widget = new QWidget();
-
return widget;
}
QWidget* QtTreeWidgetItem::getExpandedRosterWidget() {
QWidget* widget = new QWidget();
-
return widget;
}
QtTreeWidgetItem::~QtTreeWidgetItem() {
- parent_->removeChild(this);
- qDeleteAll(children_);
+ //It's possible (due to the way the roster deletes items in unknown order when it is deleted)
+ // That the children will be deleted before the groups, or that the groups are deleted
+ // before the children. If the children are deleted first, they will let the parent know that
+ // They've been deleted. If the parent is deleted first, it must tell the children not to
+ // tell it when they're deleted. Everything will be deleted in the end, because all the
+ // widgets are owned by the Roster in Swiften.
+ if (parent_) {
+ parent_->removeChild(this);
+ }
+
+ for (int i = 0; i < children_.size(); i++) {
+ children_[i]->parentItemHasBeenDeleted();
+ }
+}
+
+void QtTreeWidgetItem::parentItemHasBeenDeleted() {
+ parent_ = NULL;
}
QtTreeWidgetItem* QtTreeWidgetItem::getParentItem() {
diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.h b/Swift/QtUI/Roster/QtTreeWidgetItem.h
index 20e6f5d..1b898b0 100644
--- a/Swift/QtUI/Roster/QtTreeWidgetItem.h
+++ b/Swift/QtUI/Roster/QtTreeWidgetItem.h
@@ -40,6 +40,7 @@ class QtTreeWidgetItem : public QObject, public TreeWidgetItem {
void setTextColor(unsigned long color);
void setBackgroundColor(unsigned long color);
void setExpanded(bool b);
+ void parentItemHasBeenDeleted();
void hide();
void show();
bool isShown();