X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ed2d352c42a6d517d4f29b3582c0e00aa34fe647..52da2dc809cde43d2ada7b76e014dd4fee5b62c3:/src/kitemviews/kitemlistcontainer.cpp diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp index 3893ceaea..65250832b 100644 --- a/src/kitemviews/kitemlistcontainer.cpp +++ b/src/kitemviews/kitemlistcontainer.cpp @@ -12,6 +12,9 @@ #include "kitemlistview.h" #include "private/kitemlistsmoothscroller.h" +#ifndef QT_NO_ACCESSIBILITY +#include +#endif #include #include #include @@ -138,6 +141,21 @@ void KItemListContainer::keyPressEvent(QKeyEvent *event) } } +void KItemListContainer::contextMenuEvent(QContextMenuEvent *event) +{ + // Note copied from the keyPressEvent() method above because the same reasons probably also apply here. + // TODO: We should find a better way to handle the context menu events in the view. + // The reasons why we need this hack are: + // 1. Without reimplementing contextMenuEvent() here, the event would not reach the QGraphicsView. + // 2. By default, the KItemListView does not have the keyboard focus in the QGraphicsScene, so + // simply sending the event to the QGraphicsView which is the KItemListContainer's viewport + // does not work. + KItemListView *view = m_controller->view(); + if (view) { + QApplication::sendEvent(view, event); + } +} + void KItemListContainer::showEvent(QShowEvent *event) { QAbstractScrollArea::showEvent(event); @@ -175,6 +193,33 @@ void KItemListContainer::wheelEvent(QWheelEvent *event) smoothScroller->handleWheelEvent(event); } +void KItemListContainer::focusInEvent(QFocusEvent *event) +{ + KItemListView *view = m_controller->view(); + if (view) { + QApplication::sendEvent(view, event); + + // 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(); +#ifndef QT_NO_ACCESSIBILITY + QAccessibleEvent accessibleFocusInEvent(this, QAccessible::Focus); + accessibleFocusInEvent.setChild(0); + QAccessible::updateAccessibility(&accessibleFocusInEvent); +#endif + }); + } +} + +void KItemListContainer::focusOutEvent(QFocusEvent *event) +{ + KItemListView *view = m_controller->view(); + if (view) { + QApplication::sendEvent(view, event); + } +} + void KItemListContainer::slotScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous) { Q_UNUSED(previous) @@ -368,6 +413,11 @@ void KItemListContainer::updateSmoothScrollers(Qt::Orientation orientation) m_horizontalSmoothScroller->setPropertyName("scrollOffset"); m_verticalSmoothScroller->setPropertyName("itemOffset"); } + + const bool isRightToLeft = m_controller->view()->layoutDirection() == Qt::RightToLeft; + QScrollBar *hScrollBar = horizontalScrollBar(); + hScrollBar->setInvertedAppearance(isRightToLeft && orientation == Qt::Vertical); + hScrollBar->setInvertedControls(!isRightToLeft || orientation == Qt::Vertical); } void KItemListContainer::updateScrollOffsetScrollBarPolicy()