mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
Fixed possible crash when switching between 2 views. In this case DolphinView::itemView() can temporary be 0 and it is important that no signals/slot connection is existing for the (by deleteLater()) deleted instance.
Thanks a lot to Frank Reininghaus for the analysis! CCMAIL: frank78ac@googlemail.com svn path=/trunk/KDE/kdebase/apps/; revision=1037671
This commit is contained in:
parent
0bc2e64383
commit
453c48660c
|
@ -362,6 +362,7 @@ int DolphinView::selectedItemsCount() const
|
|||
void DolphinView::setContentsPosition(int x, int y)
|
||||
{
|
||||
QAbstractItemView* view = m_viewAccessor.itemView();
|
||||
Q_ASSERT(view != 0);
|
||||
view->horizontalScrollBar()->setValue(x);
|
||||
view->verticalScrollBar()->setValue(y);
|
||||
|
||||
|
@ -370,8 +371,10 @@ void DolphinView::setContentsPosition(int x, int y)
|
|||
|
||||
QPoint DolphinView::contentsPosition() const
|
||||
{
|
||||
const int x = m_viewAccessor.itemView()->horizontalScrollBar()->value();
|
||||
const int y = m_viewAccessor.itemView()->verticalScrollBar()->value();
|
||||
QAbstractItemView* view = m_viewAccessor.itemView();
|
||||
Q_ASSERT(view != 0);
|
||||
const int x = view->horizontalScrollBar()->value();
|
||||
const int y = view->verticalScrollBar()->value();
|
||||
return QPoint(x, y);
|
||||
}
|
||||
|
||||
|
@ -1261,6 +1264,7 @@ void DolphinView::applyViewProperties()
|
|||
void DolphinView::createView()
|
||||
{
|
||||
deleteView();
|
||||
|
||||
Q_ASSERT(m_viewAccessor.itemView() == 0);
|
||||
m_viewAccessor.createView(this, m_controller, m_mode);
|
||||
|
||||
|
@ -1306,9 +1310,14 @@ void DolphinView::deleteView()
|
|||
m_topLayout->removeWidget(view);
|
||||
view->close();
|
||||
|
||||
// disconnect all signal/slots
|
||||
disconnect(view);
|
||||
m_controller->disconnect(view);
|
||||
view->disconnect();
|
||||
disconnect(view->verticalScrollBar(), SIGNAL(valueChanged(int)),
|
||||
this, SLOT(emitContentsMoved()));
|
||||
disconnect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)),
|
||||
this, SLOT(emitContentsMoved()));
|
||||
|
||||
m_viewAccessor.deleteView();
|
||||
}
|
||||
|
@ -1417,8 +1426,9 @@ void DolphinView::ViewAccessor::deleteView()
|
|||
m_iconsView = 0;
|
||||
m_detailsView = 0;
|
||||
|
||||
if (m_columnsContainer)
|
||||
if (m_columnsContainer != 0) {
|
||||
m_columnsContainer->deleteLater();
|
||||
}
|
||||
m_columnsContainer = 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue