┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-10-19 18:55:50 +0000
committerPeter Penz <[email protected]>2009-10-19 18:55:50 +0000
commit453c48660c87820b0e5f2e445213048bee9968a1 (patch)
treebef5de8f3a6846c3aed290be4c48083f97f98f52 /src
parent0bc2e64383cff88c547c30f91e6233388d56a958 (diff)
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: [email protected] svn path=/trunk/KDE/kdebase/apps/; revision=1037671
Diffstat (limited to 'src')
-rw-r--r--src/dolphinview.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp
index 5ae81f31d..a49aabdd9 100644
--- a/src/dolphinview.cpp
+++ b/src/dolphinview.cpp
@@ -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;
}