Q_UNUSED(key)
if (KItemListContainer *container = qobject_cast<KItemListContainer *>(object)) {
+ if (auto controller = container->controller(); controller) {
+ if (KItemListView *view = controller->view(); view && view->accessibleParent()) {
+ return view->accessibleParent();
+ }
+ }
return new KItemListContainerAccessible(container);
} else if (KItemListView *view = qobject_cast<KItemListView *>(object)) {
- return new KItemListViewAccessible(view);
+ return new KItemListViewAccessible(view, view->accessibleParent());
}
return nullptr;
return m_groupHeaderCreator;
}
+#ifndef QT_NO_ACCESSIBILITY
+void KItemListView::setAccessibleParentsObject(KItemListContainer *accessibleParentsObject)
+{
+ Q_ASSERT(!m_accessibleParent);
+ m_accessibleParent = new KItemListContainerAccessible(accessibleParentsObject);
+}
+KItemListContainerAccessible *KItemListView::accessibleParent()
+{
+ Q_CHECK_PTR(m_accessibleParent); // We always want the accessibility tree/hierarchy to be complete.
+ return m_accessibleParent;
+}
+#endif
+
QSizeF KItemListView::itemSize() const
{
return m_itemSize;
if (m_headerWidget->automaticColumnResizing()) {
applyAutomaticColumnWidths();
} else {
- const qreal requiredWidth = columnWidthsSum();
+ const qreal requiredWidth = columnWidthsSum() + 2 * m_headerWidget->sidePadding();
const QSizeF dynamicItemSize(qMax(newSize.width(), requiredWidth), m_itemSize.height());
m_layouter->setItemSize(dynamicItemSize);
}
std::optional<int> KItemListView::itemAt(const QPointF &pos) const
{
+ if (headerBoundaries().contains(pos)) {
+ return std::nullopt;
+ }
+
QHashIterator<int, KItemListWidget *> it(m_visibleItems);
while (it.hasNext()) {
it.next();
return m_sizeHintResolver->isElided(index);
}
-void KItemListView::scrollToItem(int index)
+void KItemListView::scrollToItem(int index, ViewItemPosition viewItemPosition)
{
QRectF viewGeometry = geometry();
if (m_headerWidget->isVisible()) {
}
QRectF currentRect = itemRect(index);
- // Fix for Bug 311099 - View the underscore when using Ctrl + PagDown
+ // Fix for Bug 311099 - View the underscore when using Ctrl + PageDown
currentRect.adjust(-m_styleOption.horizontalMargin, -m_styleOption.verticalMargin, m_styleOption.horizontalMargin, m_styleOption.verticalMargin);
- if (!viewGeometry.contains(currentRect)) {
- qreal newOffset = scrollOffset();
- if (scrollOrientation() == Qt::Vertical) {
+ qreal newOffset = scrollOffset();
+ if (scrollOrientation() == Qt::Vertical && (currentRect.top() < viewGeometry.top() || currentRect.bottom() > viewGeometry.bottom())) {
+ switch (viewItemPosition) {
+ case Beginning:
+ newOffset += currentRect.top() - viewGeometry.top();
+ break;
+ case Middle:
+ newOffset += 0.5 * (currentRect.top() + currentRect.bottom() - (viewGeometry.top() + viewGeometry.bottom()));
+ break;
+ case End:
+ newOffset += currentRect.bottom() - viewGeometry.bottom();
+ break;
+ case Nearest:
if (currentRect.top() < viewGeometry.top()) {
newOffset += currentRect.top() - viewGeometry.top();
- } else if (currentRect.bottom() > viewGeometry.bottom()) {
+ } else {
newOffset += currentRect.bottom() - viewGeometry.bottom();
}
- } else {
+ break;
+ default:
+ Q_UNREACHABLE();
+ }
+ } else if (scrollOrientation() == Qt::Horizontal && (currentRect.left() < viewGeometry.left() || currentRect.right() > viewGeometry.right())) {
+ switch (viewItemPosition) {
+ case Beginning:
+ if (layoutDirection() == Qt::RightToLeft) {
+ newOffset += currentRect.right() - viewGeometry.right();
+ } else {
+ newOffset += currentRect.left() - viewGeometry.left();
+ }
+ break;
+ case Middle:
+ newOffset += 0.5 * (currentRect.left() + currentRect.right() - (viewGeometry.left() + viewGeometry.right()));
+ break;
+ case End:
+ if (layoutDirection() == Qt::RightToLeft) {
+ newOffset += currentRect.left() - viewGeometry.left();
+ } else {
+ newOffset += currentRect.right() - viewGeometry.right();
+ }
+ break;
+ case Nearest:
if (currentRect.left() < viewGeometry.left()) {
newOffset += currentRect.left() - viewGeometry.left();
- } else if (currentRect.right() > viewGeometry.right()) {
+ } else {
newOffset += currentRect.right() - viewGeometry.right();
}
+ break;
+ default:
+ Q_UNREACHABLE();
}
+ }
- if (newOffset != scrollOffset()) {
- Q_EMIT scrollTo(newOffset);
- return;
- }
+ if (newOffset != scrollOffset()) {
+ Q_EMIT scrollTo(newOffset);
+ return;
}
Q_EMIT scrollingStopped();
updateFont();
break;
+ case QEvent::FocusIn:
+ focusInEvent(static_cast<QFocusEvent *>(event));
+ event->accept();
+ return true;
+ break;
+
+ case QEvent::FocusOut:
+ focusOutEvent(static_cast<QFocusEvent *>(event));
+ event->accept();
+ return true;
+ break;
+
default:
// Forward all other events to the controller and handle them there
if (!m_editingRole && m_controller && m_controller->processEvent(event, transform())) {
void KItemListView::applyColumnWidthsFromHeader()
{
// Apply the new size to the layouter
- const qreal requiredWidth = columnWidthsSum() + m_headerWidget->sidePadding();
+ const qreal requiredWidth = columnWidthsSum() + 2 * m_headerWidget->sidePadding();
const QSizeF dynamicItemSize(qMax(size().width(), requiredWidth), m_itemSize.height());
m_layouter->setItemSize(dynamicItemSize);
qreal firstColumnWidth = m_headerWidget->columnWidth(firstRole);
QSizeF dynamicItemSize = m_itemSize;
- qreal requiredWidth = columnWidthsSum() + m_headerWidget->sidePadding()
- + m_headerWidget->sidePadding(); // Adding the padding a second time so we have the same padding symmetrically on both sides of the view.
- // This improves UX, looks better and increases the chances of users figuring out that the padding area can be used for deselecting and dropping files.
+ qreal requiredWidth = columnWidthsSum() + 2 * m_headerWidget->sidePadding(); // Adding the padding a second time so we have the same padding
+ // symmetrically on both sides of the view. This improves UX, looks better and increases the chances of users figuring out that the padding
+ // area can be used for deselecting and dropping files.
const qreal availableWidth = size().width();
if (requiredWidth < availableWidth) {
// Stretch the first column to use the whole remaining width