diff options
author | Kevin Smith <git@kismith.co.uk> | 2009-08-09 14:37:57 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2009-08-09 14:37:57 (GMT) |
commit | b589aa3732712c31da44523fa60fc5c4bc92ea9b (patch) | |
tree | 8874c488a7d3f40669a69276dcbbdebb2fa3cd97 /Swift/QtUI | |
parent | fdb63d1c161ff951969244906a77be016d9b2f02 (diff) | |
download | swift-b589aa3732712c31da44523fa60fc5c4bc92ea9b.zip swift-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.cpp | 21 | ||||
-rw-r--r-- | Swift/QtUI/Roster/QtTreeWidgetItem.h | 1 |
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(); |