X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4e1c5471ef9f49c287b869310f0f8f20fa300a36..b60da9b67acbfe94e43bd631e4e685f366d53ec5:/src/dolphinviewautoscroller.cpp diff --git a/src/dolphinviewautoscroller.cpp b/src/dolphinviewautoscroller.cpp index 5e9e17f1f..fbce803b8 100644 --- a/src/dolphinviewautoscroller.cpp +++ b/src/dolphinviewautoscroller.cpp @@ -36,6 +36,7 @@ DolphinViewAutoScroller::DolphinViewAutoScroller(QAbstractItemView* parent) : { m_itemView->setAutoScroll(false); m_itemView->viewport()->installEventFilter(this); + m_itemView->installEventFilter(this); m_timer = new QTimer(this); m_timer->setSingleShot(false); @@ -83,7 +84,23 @@ bool DolphinViewAutoScroller::eventFilter(QObject* watched, QEvent* event) default: break; } - } + } else if ((watched == m_itemView) && (event->type() == QEvent::KeyPress)) { + switch (static_cast(event)->key()) { + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_PageUp: + case Qt::Key_PageDown: + case Qt::Key_Home: + case Qt::Key_End: + QMetaObject::invokeMethod(this, "scrollToCurrentIndex", Qt::QueuedConnection); + break; + default: + break; + } + } + return QObject::eventFilter(watched, event); } @@ -114,6 +131,12 @@ void DolphinViewAutoScroller::scrollViewport() } } +void DolphinViewAutoScroller::scrollToCurrentIndex() +{ + const QModelIndex index = m_itemView->currentIndex(); + m_itemView->scrollTo(index); +} + void DolphinViewAutoScroller::triggerAutoScroll() { const bool verticalScrolling = (m_itemView->verticalScrollBar() != 0) &&