fixing crash on disconnect
[quassel.git] / src / client / modelpropertymapper.cpp
index 32dfe7f..2e3b100 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -35,13 +35,13 @@ ModelPropertyMapper::~ModelPropertyMapper() {
 
 void ModelPropertyMapper::setModel(QAbstractItemModel *model) {
   if(_model) {
-    setSelectionModel(new QItemSelectionModel(model));
     disconnect(_model, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
               this, SLOT(dataChanged(QModelIndex, QModelIndex)));
   }
   _model = model;
   connect(_model, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
          this, SLOT(dataChanged(QModelIndex, QModelIndex)));
+  setSelectionModel(new QItemSelectionModel(model));
 }
 
 QAbstractItemModel *ModelPropertyMapper::model() const {
@@ -81,10 +81,12 @@ void ModelPropertyMapper::removeMapping(int column, int role, QObject *target, c
   }
   
   if(column == 0 && role == 0 && !property.isNull()) {
-    QList<Mapping>::iterator iter;
-    for(iter = _mappings.begin(); iter != _mappings.end(); iter++) {
+    QList<Mapping>::iterator iter = _mappings.begin();
+    while(iter != _mappings.end()) {
       if((*iter).target == target)
-       _mappings.erase(iter);
+       iter = _mappings.erase(iter);
+      else
+       iter++;
     }
     return;
   }
@@ -115,6 +117,5 @@ void ModelPropertyMapper::dataChanged(const QModelIndex &topLeft, const QModelIn
 }
 
 void ModelPropertyMapper::targetDestroyed() {
-  QObject *obj = static_cast<QObject *>(sender());
-  removeMapping(0, 0, obj, QByteArray());
+  removeMapping(0, 0, sender(), QByteArray());
 }