diff options
| author | Arno <am@disconnect.de> | 2013-07-29 10:08:33 +0200 | 
|---|---|---|
| committer | Arno <am@disconnect.de> | 2013-07-29 10:08:33 +0200 | 
| commit | 06cfadc8386aec27b9c7c43486fc0b057e9fb022 (patch) | |
| tree | ca0343db7f3363fb35bd4fc0ea72779651e0361e /filesystemwidget.cpp | |
| parent | 28c7436a71910aabcc37945255fb577f7a032f0d (diff) | |
| download | SheMov-06cfadc8386aec27b9c7c43486fc0b057e9fb022.tar.gz SheMov-06cfadc8386aec27b9c7c43486fc0b057e9fb022.tar.bz2 SheMov-06cfadc8386aec27b9c7c43486fc0b057e9fb022.zip | |
Prevent datacollector from running when operating on files
This stuff was racy from the beginning. It could happen that the model
got reset after we fetched the selected indexes. Add a mutex and lock it
before operating on the file view. Hopefully this will many, if not all
random crashes.
Diffstat (limited to 'filesystemwidget.cpp')
| -rw-r--r-- | filesystemwidget.cpp | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 4c05640..79ef2ab 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -163,6 +163,7 @@ void FilesystemWidget::directoryEdited(){  }  void FilesystemWidget::fileViewActivated(const QModelIndex &idx){ +    QMutexLocker l(&mFileModel->collector()->hold());  	QModelIndex real = mFileProxy->mapToSource(idx);      if(mFileModel->isDir(real)){  		if(idx.data().toString() == ".."){ @@ -216,6 +217,7 @@ void FilesystemWidget::goBack(){  }  void FilesystemWidget::deleteFiles(){ +    QMutexLocker l(&mFileModel->collector()->hold());      QSortFilterProxyModel *proxy = qobject_cast<QSortFilterProxyModel*>(mFileView->model());  	QModelIndexList selected = mFileView->selectionModel()->selectedRows();      if(selected.isEmpty()){ @@ -233,6 +235,7 @@ void FilesystemWidget::deleteFiles(){  }  void FilesystemWidget::toClipboard(int clipmode){ +    QMutexLocker l(&mFileModel->collector()->hold());  	mClipboardMode = clipmode;  	QClipboard *clip = qApp->clipboard();  	QModelIndexList selected = mFileView->selectionModel()->selectedRows(); @@ -309,6 +312,7 @@ void FilesystemWidget::playSelected(const QString &player){  }  void FilesystemWidget::readSettings(){ +    QMutexLocker l(&mFileModel->collector()->hold());  	QSettings s;  	QStringList expandedDirs = s.value("paths/expandeddirs").toStringList();  	if(expandedDirs.isEmpty()){ @@ -337,6 +341,7 @@ void FilesystemWidget::readSettings(){  }  void FilesystemWidget::writeSettings(){ +    QMutexLocker l(&mFileModel->collector()->hold());  	QSettings s;  	s.setValue("paths/expandeddirs", mExpandedDirs);  	QModelIndex currentDir = mDirView->selectionModel()->currentIndex(); @@ -356,6 +361,7 @@ void FilesystemWidget::configChanged(){  }  void FilesystemWidget::dvdMount(){ +    QMutexLocker l(&mFileModel->collector()->hold());  	QSettings s;  	QString mountDir = s.value("paths/dvdmount").toString();  	if(isMounted()){ @@ -414,6 +420,7 @@ void FilesystemWidget::selectAllPV(){  }  void FilesystemWidget::setWindowTitle(){ +    QMutexLocker l(&mFileModel->collector()->hold());      QModelIndex curIdx = mDirView->selectionModel()->currentIndex();      QString dir = curIdx.data(QFileSystemModel::FilePathRole).toString();      mWindowTitle = QString(tr("Filemanager - [%1]")).arg(dir); @@ -501,6 +508,7 @@ void FilesystemWidget::copyRecursive(const QFileInfo &start, const QString &dest  }  const QString FilesystemWidget::selectedDir(){ +    QMutexLocker l(&mFileModel->collector()->hold());  	const QModelIndexList selected = mDirView->selectionModel()->selectedRows();  	if(!selected.isEmpty()){  		return selected.at(0).data(QFileSystemModel::FilePathRole).toString(); | 
