From 1eaa1e47fe0c8bd6dd04e80b81a9864406824140 Mon Sep 17 00:00:00 2001 From: Klaas Freitag Date: Thu, 19 Sep 2013 21:27:43 +0200 Subject: [PATCH] Be more careful with items in model when deleting rows. --- src/mirall/accountsettings.cpp | 44 ++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/mirall/accountsettings.cpp b/src/mirall/accountsettings.cpp index 8911689abc..013775a356 100644 --- a/src/mirall/accountsettings.cpp +++ b/src/mirall/accountsettings.cpp @@ -255,6 +255,8 @@ void AccountSettings::slotRemoveCurrentFolder() { QModelIndex selected = ui->_folderList->selectionModel()->currentIndex(); if( selected.isValid() ) { + int row = selected.row(); + QString alias = _model->data( selected, FolderStatusDelegate::FolderAliasRole ).toString(); qDebug() << "Remove Folder alias " << alias; if( !alias.isEmpty() ) { @@ -268,9 +270,22 @@ void AccountSettings::slotRemoveCurrentFolder() if( ret == QMessageBox::No ) { return; } + /* Remove the selected item from the timer hash. */ + QStandardItem *item = NULL; + if( selected.isValid() ) + item = _model->itemFromIndex(selected); + + if( selected.isValid() && item && _hideProgressTimers.contains(item) ) { + QTimer *t = _hideProgressTimers[item]; + t->stop(); + _hideProgressTimers.remove(item); + delete(t); + } + FolderMan *folderMan = FolderMan::instance(); folderMan->slotRemoveFolder( alias ); - setFolderList(folderMan->map()); + _model->removeRow(row); + emit folderChanged(); slotCheckConnection(); } @@ -343,8 +358,14 @@ void AccountSettings::slotCheckConnection() void AccountSettings::setFolderList( const Folder::Map &folders ) { _model->clear(); + + foreach(QTimer *t, _hideProgressTimers) { + t->stop(); + delete t; + } + _hideProgressTimers.clear(); + foreach( Folder *f, folders ) { - qDebug() << "Folder: " << f; slotAddFolder( f ); } @@ -668,12 +689,21 @@ void AccountSettings::slotHideProgress() while (i != _hideProgressTimers.constEnd()) { if( i.value() == send_timer ) { QStandardItem *item = i.key(); - item->setData( QVariant(false), FolderStatusDelegate::AddProgressSpace ); - item->setData( QVariant(QString::null), FolderStatusDelegate::SyncProgressOverallString ); - item->setData( QVariant(QString::null), FolderStatusDelegate::SyncProgressItemString ); - item->setData( 0, FolderStatusDelegate::SyncProgressOverallPercent ); - ui->_folderList->repaint(); + /* Check if this item is still existing */ + bool ok = false; + for( int r = 0; !ok && r < _model->rowCount(); r++) { + if( item == _model->item(r,0) ) { + ok = true; + } + } + + if( ok ) { + item->setData( QVariant(false), FolderStatusDelegate::AddProgressSpace ); + item->setData( QVariant(QString::null), FolderStatusDelegate::SyncProgressOverallString ); + item->setData( QVariant(QString::null), FolderStatusDelegate::SyncProgressItemString ); + item->setData( 0, FolderStatusDelegate::SyncProgressOverallPercent ); + } _hideProgressTimers.remove(item); break; }