#include "private/kitemlistsmoothscroller.h"
#ifndef QT_NO_ACCESSIBILITY
-#include <QAccessibleEvent>
+#include "accessibility/kitemlistviewaccessible.h"
#endif
#include <QApplication>
#include <QFontMetrics>
// We need to set the focus to the view or accessibility software will only announce the container (which has no information available itself).
// For some reason actively setting the focus to the view needs to be delayed or the focus will immediately go back to this container.
QTimer::singleShot(0, this, [this, view]() {
- view->setFocus();
+ if (!isAncestorOf(QApplication::focusWidget())) {
+ view->setFocus();
+ }
#ifndef QT_NO_ACCESSIBILITY
- QAccessibleEvent accessibleFocusInEvent(this, QAccessible::Focus);
- accessibleFocusInEvent.setChild(0);
- QAccessible::updateAccessibility(&accessibleFocusInEvent);
+ static_cast<KItemListViewAccessible *>(QAccessible::queryAccessibleInterface(view))->setAccessibleFocusAndAnnounceAll();
#endif
});
}
KItemListSmoothScroller *smoothScroller = nullptr;
QScrollBar *scrollOffsetScrollBar = nullptr;
- int singleStep = 0;
int pageStep = 0;
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:
- // We want to consider one "line" to be the text label which has a
- // roughly fixed height rather than using the height of the icon which
- // may be very tall
- const QFontMetrics metrics(font());
- singleStep = metrics.height() * QApplication::wheelScrollLines();
-
// We cannot use view->size().height() because this height might
// include the header widget, which is not part of the scrolled area.
pageStep = view->verticalPageStep();
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();
maximum = qMax(0, int(view->maximumScrollOffset() - view->size().width()));
}
+ const int singleStep = view->scrollSingleStep();
const int value = view->scrollOffset();
if (smoothScroller->requestScrollBarUpdate(maximum)) {
const bool updatePolicy = (scrollOffsetScrollBar->maximum() > 0 && maximum == 0) || horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOn;
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();