From 6a7cb5ff7d29cc636b432a96e0db9ef9f9030527 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Mon, 30 Apr 2012 18:54:12 +0200 Subject: [PATCH] Fix crash when closing Dolphin during generating previews BUG: 299108 FIXED-IN: 4.9.0 --- src/kitemviews/kfileitemlistview.cpp | 2 -- src/kitemviews/kitemlistcontroller.cpp | 12 ++++++++---- src/kitemviews/kitemlistview.cpp | 10 ++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 14547fc7be..b5cc343f40 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -66,8 +66,6 @@ KFileItemListView::KFileItemListView(QGraphicsWidget* parent) : KFileItemListView::~KFileItemListView() { - delete m_modelRolesUpdater; - m_modelRolesUpdater = 0; } void KFileItemListView::setPreviewsShown(bool show) diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 1c35072e52..6045f5020c 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -75,12 +75,10 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v KItemListController::~KItemListController() { setView(0); - delete m_view; - m_view = 0; + Q_ASSERT(!m_view); setModel(0); - delete m_model; - m_model = 0; + Q_ASSERT(!m_model); } void KItemListController::setModel(KItemModelBase* model) @@ -90,6 +88,10 @@ void KItemListController::setModel(KItemModelBase* model) } KItemModelBase* oldModel = m_model; + if (oldModel) { + oldModel->deleteLater(); + } + m_model = model; if (m_model) { m_model->setParent(this); @@ -123,11 +125,13 @@ void KItemListController::setView(KItemListView* view) KItemListView* oldView = m_view; if (oldView) { disconnect(oldView, SIGNAL(scrollOffsetChanged(qreal,qreal)), this, SLOT(slotViewScrollOffsetChanged(qreal,qreal))); + oldView->deleteLater(); } m_view = view; if (m_view) { + m_view->setParent(this); m_view->setController(this); m_view->setModel(m_model); connect(m_view, SIGNAL(scrollOffsetChanged(qreal,qreal)), this, SLOT(slotViewScrollOffsetChanged(qreal,qreal))); diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 8ecd1e2126..48849a3c13 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -761,13 +761,8 @@ void KItemListView::onControllerChanged(KItemListController* current, KItemListC void KItemListView::onModelChanged(KItemModelBase* current, KItemModelBase* previous) { + Q_UNUSED(current); Q_UNUSED(previous); - - m_sizeHintResolver->clearCache(); - const int itemCount = current->count(); - if (itemCount > 0) { - m_sizeHintResolver->itemsInserted(0, itemCount); - } } void KItemListView::onScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous) @@ -1446,6 +1441,8 @@ void KItemListView::setModel(KItemModelBase* model) this, SLOT(slotSortRoleChanged(QByteArray,QByteArray))); } + m_sizeHintResolver->clearCache(); + m_model = model; m_layouter->setModel(model); m_grouped = model->groupedSorting(); @@ -1468,6 +1465,7 @@ void KItemListView::setModel(KItemModelBase* model) const int itemCount = m_model->count(); if (itemCount > 0) { + m_sizeHintResolver->itemsInserted(0, itemCount); slotItemsInserted(KItemRangeList() << KItemRange(0, itemCount)); } }