summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-11-15 15:22:11 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-11-15 15:22:11 (GMT)
commit6625c07d980f0761f64bde24d3b7f63cfc7e21d1 (patch)
treeaff7916a891ff7132f00f95dc1061471eb1dcd0a /Swift/QtUI
parent0c6c79df29c58ff8790941ea40d40f84fae773c6 (diff)
downloadswift-6625c07d980f0761f64bde24d3b7f63cfc7e21d1.zip
swift-6625c07d980f0761f64bde24d3b7f63cfc7e21d1.tar.bz2
Sanitise the Roster widget on signout.
This will hopefully avoid crashes in the RosterDelegate due to Qt believing that the RosterItems still exist and that it can read them. Unverified as I can't reproduce the crash on this machine, but hopefully Resolves: #678
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/Roster/RosterModel.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp
index c2d4147..a6f40bb 100644
--- a/Swift/QtUI/Roster/RosterModel.cpp
+++ b/Swift/QtUI/Roster/RosterModel.cpp
@@ -30,15 +30,19 @@ RosterModel::~RosterModel() {
void RosterModel::setRoster(Roster* roster) {
roster_ = roster;
- if (!roster_) return;
- roster->onChildrenChanged.connect(boost::bind(&RosterModel::handleChildrenChanged, this, _1));
- roster->onDataChanged.connect(boost::bind(&RosterModel::handleDataChanged, this, _1));
+ if (roster_) {
+ roster->onChildrenChanged.connect(boost::bind(&RosterModel::handleChildrenChanged, this, _1));
+ roster->onDataChanged.connect(boost::bind(&RosterModel::handleDataChanged, this, _1));
+ }
reLayout();
}
void RosterModel::reLayout() {
//emit layoutChanged();
reset();
+ if (!roster_) {
+ return;
+ }
foreach (RosterItem* item, roster_->getRoot()->getDisplayedChildren()) {
GroupRosterItem* child = dynamic_cast<GroupRosterItem*>(item);
if (!child) continue;
@@ -161,6 +165,9 @@ QIcon RosterModel::getPresenceIcon(RosterItem* item) const {
QModelIndex RosterModel::index(int row, int column, const QModelIndex& parent) const {
+ if (!roster_) {
+ return QModelIndex();
+ }
GroupRosterItem* parentItem;
if (!parent.isValid()) {
//top level
@@ -177,7 +184,7 @@ QModelIndex RosterModel::index(RosterItem* item) const {
/* Recursive check that it's ok to create such an item
Assuming there are more contacts in a group than groups in a
group, this could save a decent chunk of search time at startup.*/
- if (parent == NULL || (parent != roster_->getRoot() && !index(parent).isValid())) {
+ if (parent == NULL || roster_ == NULL || (parent != roster_->getRoot() && !index(parent).isValid())) {
return QModelIndex();
}
for (size_t i = 0; i < parent->getDisplayedChildren().size(); i++) {
@@ -189,7 +196,7 @@ QModelIndex RosterModel::index(RosterItem* item) const {
}
QModelIndex RosterModel::parent(const QModelIndex& child) const {
- if (!child.isValid()) {
+ if (!roster_ || !child.isValid()) {
return QModelIndex();
}