]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/ktreeview.cpp
fix crash in Folder Panel (= treeview) when Dolphin gets closed before the panel...
[dolphin.git] / src / ktreeview.cpp
index 687bfe1e385e5a089489d2cafb19bb489476fda0..5c665ee997b945d7bd301c8ff6018222e5bec2f7 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <KGlobalSettings>
 
+#include <QEvent>
 #include <QItemSelectionModel>
 #include <QScrollBar>
 #include <QTimer>
@@ -36,11 +37,16 @@ KTreeView::KTreeViewPrivate::KTreeViewPrivate(KTreeView *parent) :
 {
     startScrollTimer = new QTimer(this);
     startScrollTimer->setSingleShot(true);
-    startScrollTimer->setInterval(50);
+    startScrollTimer->setInterval(300);
+
+    timeLine = new QTimeLine(300, this);
+}
+
+void KTreeView::KTreeViewPrivate::connectScrollTimers()
+{
     connect(startScrollTimer, SIGNAL(timeout()),
             this, SLOT(startScrolling()));
 
-    timeLine = new QTimeLine(300, this);
     connect(timeLine, SIGNAL(frameChanged(int)),
             this, SLOT(updateVerticalScrollBar(int)));
 
@@ -54,10 +60,6 @@ KTreeView::KTreeViewPrivate::KTreeViewPrivate(KTreeView *parent) :
             startScrollTimer, SLOT(start()));
 }
 
-KTreeView::~KTreeView()
-{
-}
-
 void KTreeView::KTreeViewPrivate::startScrolling()
 {
     QModelIndex index;
@@ -130,14 +132,18 @@ void KTreeView::KTreeViewPrivate::updateVerticalScrollBar(int value)
 // ************************************************
 
 KTreeView::KTreeView(QWidget *parent) :
-       QTreeView(parent),
-       d(new KTreeViewPrivate(this))
+    QTreeView(parent),
+    d(new KTreeViewPrivate(this))
 {
     if (KGlobalSettings::graphicEffectsLevel() >= KGlobalSettings::SimpleAnimationEffects) {
         setAutoHorizontalScroll(true);
     }
 }
 
+KTreeView::~KTreeView()
+{
+}
+
 void KTreeView::setAutoHorizontalScroll(bool value)
 {
        d->autoHorizontalScroll = value;
@@ -156,5 +162,26 @@ void KTreeView::setSelectionModel(QItemSelectionModel *selectionModel)
             d->startScrollTimer, SLOT(start()));
 }
 
+void KTreeView::scrollTo(const QModelIndex& index, ScrollHint hint)
+{
+    if (d->autoHorizontalScroll) {
+        // assure that the value of the horizontal scrollbar stays on its current value,
+        // KTreeView will adjust the value manually
+        const int value = horizontalScrollBar()->value();
+        QTreeView::scrollTo(index, hint);
+        horizontalScrollBar()->setValue(value);
+    } else {
+        QTreeView::scrollTo(index, hint);
+    }
+}
+
+bool KTreeView::event(QEvent* event)
+{
+    if (event->type() == QEvent::Polish) {
+        d->connectScrollTimers();
+    }
+    return QTreeView::event(event);
+}
+
 #include "ktreeview.moc"
 #include "ktreeview_p.moc"