┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorAkseli Lahtinen <[email protected]>2024-11-29 09:24:55 +0000
committerAkseli Lahtinen <[email protected]>2024-11-29 09:24:55 +0000
commit15e0c2a98f480f203ce168b6fa9a2e1f2b0ed8f8 (patch)
tree6bc955bb18cf6ff1ded9fb95e2f9b168d8f155ca /src/kitemviews
parentac1e52ce46120d269ce1b8b49c85ab59d9aeccd1 (diff)
Make "open path" and "open path in new tab" scroll to the selected item
**Open Path** When user clicks on "Open Path" after searching for an item, user expects the view to show the item immediately. We wait for the KItemListSmoothScroller to be done with its animation before the scrollbar sizes are being changed. **Open Path in New Tab** When user selects "Open Path in New Tab", we open a new tab to the folder where the file is, then select and set the file current. We need to get the correct tab when opening one, so it has been added as a return value. BUG:495613
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kitemlistcontainer.cpp12
-rw-r--r--src/kitemviews/private/kitemlistsmoothscroller.cpp8
-rw-r--r--src/kitemviews/private/kitemlistsmoothscroller.h1
3 files changed, 21 insertions, 0 deletions
diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp
index 65250832b..ff12aee7c 100644
--- a/src/kitemviews/kitemlistcontainer.cpp
+++ b/src/kitemviews/kitemlistcontainer.cpp
@@ -291,6 +291,9 @@ void KItemListContainer::updateScrollOffsetScrollBar()
int maximum = 0;
if (view->scrollOrientation() == Qt::Vertical) {
smoothScroller = m_verticalSmoothScroller;
+ if (smoothScroller->isAnimating()) {
+ return;
+ }
scrollOffsetScrollBar = verticalScrollBar();
// Don't scroll super fast when using a wheel mouse:
@@ -311,6 +314,9 @@ void KItemListContainer::updateScrollOffsetScrollBar()
maximum = qMax(0, int(view->maximumScrollOffset() - view->size().height()));
} else {
smoothScroller = m_horizontalSmoothScroller;
+ if (smoothScroller->isAnimating()) {
+ return;
+ }
scrollOffsetScrollBar = horizontalScrollBar();
singleStep = view->itemSize().width();
pageStep = view->size().width();
@@ -347,11 +353,17 @@ void KItemListContainer::updateItemOffsetScrollBar()
int pageStep = 0;
if (view->scrollOrientation() == Qt::Vertical) {
smoothScroller = m_horizontalSmoothScroller;
+ if (smoothScroller->isAnimating()) {
+ return;
+ }
itemOffsetScrollBar = horizontalScrollBar();
singleStep = view->size().width() / 10;
pageStep = view->size().width();
} else {
smoothScroller = m_verticalSmoothScroller;
+ if (smoothScroller->isAnimating()) {
+ return;
+ }
itemOffsetScrollBar = verticalScrollBar();
singleStep = view->size().height() / 10;
pageStep = view->size().height();
diff --git a/src/kitemviews/private/kitemlistsmoothscroller.cpp b/src/kitemviews/private/kitemlistsmoothscroller.cpp
index fd26d198f..517f6d983 100644
--- a/src/kitemviews/private/kitemlistsmoothscroller.cpp
+++ b/src/kitemviews/private/kitemlistsmoothscroller.cpp
@@ -214,4 +214,12 @@ void KItemListSmoothScroller::handleWheelEvent(QWheelEvent *event)
m_smoothScrolling = previous;
}
+bool KItemListSmoothScroller::isAnimating()
+{
+ if (m_animation) {
+ return (m_animation->state() == QAbstractAnimation::Running);
+ }
+ return false;
+}
+
#include "moc_kitemlistsmoothscroller.cpp"
diff --git a/src/kitemviews/private/kitemlistsmoothscroller.h b/src/kitemviews/private/kitemlistsmoothscroller.h
index 32effa3d6..9cbfbc1b8 100644
--- a/src/kitemviews/private/kitemlistsmoothscroller.h
+++ b/src/kitemviews/private/kitemlistsmoothscroller.h
@@ -68,6 +68,7 @@ public:
*/
void handleWheelEvent(QWheelEvent *event);
+ bool isAnimating();
Q_SIGNALS:
/**
* Emitted when the scrolling animation has finished