diff options
| author | Nate Graham <[email protected]> | 2023-10-05 09:15:35 -0600 |
|---|---|---|
| committer | Nate Graham <[email protected]> | 2023-10-05 09:15:35 -0600 |
| commit | 30a807e44afb334dd153c8bcbdbde4f36942bee0 (patch) | |
| tree | f2bb4b386ac76e257f87689e75db7364c7a12f6c /src/kitemviews | |
| parent | b6d9cb9949111fbaf5c875e76619ca7af83c6fc3 (diff) | |
| parent | b58fead9beaf3165146d3e536b6b14ae1cc9514d (diff) | |
Merge branch 'master' into kf6
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 16 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 20 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.h | 18 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistviewaccessible.cpp | 7 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistviewaccessible.h | 5 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistwidget.cpp | 12 |
6 files changed, 59 insertions, 19 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 0f3c5bc8c..be7a63e09 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -654,11 +654,6 @@ bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent *event, const if (m_view->scrollOrientation() == Qt::Vertical) { endPos.ry() += m_view->scrollOffset(); - if (m_view->itemSize().width() < 0) { - // Use a special rubberband for views that have only one column and - // expand the rubberband to use the whole width of the view. - endPos.setX(m_view->size().width()); - } } else { endPos.rx() += m_view->scrollOffset(); } @@ -1302,9 +1297,9 @@ void KItemListController::slotRubberBandChanged() const QRectF widgetRect = m_view->itemRect(index); if (widgetRect.intersects(rubberBandRect)) { - const QRectF iconRect = widget->iconRect().translated(widgetRect.topLeft()); - const QRectF textRect = widget->textRect().translated(widgetRect.topLeft()); - if (iconRect.intersects(rubberBandRect) || textRect.intersects(rubberBandRect)) { + // Select the full row intersecting with the rubberband rectangle + const QRectF selectionRect = widget->selectionRect().translated(widgetRect.topLeft()); + if (selectionRect.intersects(rubberBandRect)) { selectedItems.insert(index); } } @@ -1809,11 +1804,6 @@ void KItemListController::startRubberBand() QPoint startPos = m_view->transform().map(m_view->scene()->views().first()->mapFromGlobal(m_pressedMouseGlobalPos.toPoint())); if (m_view->scrollOrientation() == Qt::Vertical) { startPos.ry() += m_view->scrollOffset(); - if (m_view->itemSize().width() < 0) { - // Use a special rubberband for views that have only one column and - // expand the rubberband to use the whole width of the view. - startPos.setX(0); - } } else { startPos.rx() += m_view->scrollOffset(); } diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index d43438c30..659e59f0f 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -50,9 +50,14 @@ QAccessibleInterface *accessibleInterfaceFactory(const QString &key, QObject *ob 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; @@ -337,6 +342,19 @@ KItemListGroupHeaderCreatorBase *KItemListView::groupHeaderCreator() const 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; diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index ff51af922..7bcaec704 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -21,6 +21,8 @@ #include <QGraphicsWidget> #include <QSet> +class KItemListContainer; +class KItemListContainerAccessible; class KItemListController; class KItemListGroupHeaderCreatorBase; class KItemListHeader; @@ -142,6 +144,18 @@ public: void setGroupHeaderCreator(KItemListGroupHeaderCreatorBase *groupHeaderCreator); KItemListGroupHeaderCreatorBase *groupHeaderCreator() const; +#ifndef QT_NO_ACCESSIBILITY + /** + * Uses \a parent to create an accessible object for \a parent. That accessible object will + * then be used as the accessible parent of the accessible object for this KItemListView. + * Make sure \a parent is the container which contains this specific KItemListView. + * This method must be called once before the accessible interface is queried for this class. + */ + void setAccessibleParentsObject(KItemListContainer *accessibleParentsObject); + /** The parent of the QAccessibilityInterface of this class. */ + KItemListContainerAccessible *accessibleParent(); +#endif + /** * @return The basic size of all items. The size of an item may be larger than * the basic size (see KItemListView::itemRect()). @@ -711,6 +725,10 @@ private: QList<QByteArray> m_visibleRoles; mutable KItemListWidgetCreatorBase *m_widgetCreator; mutable KItemListGroupHeaderCreatorBase *m_groupHeaderCreator; +#ifndef QT_NO_ACCESSIBILITY + /** The object that will be the parent of this classes QAccessibleInterface. */ + KItemListContainerAccessible *m_accessibleParent = nullptr; +#endif KItemListStyleOption m_styleOption; QHash<int, KItemListWidget *> m_visibleItems; diff --git a/src/kitemviews/kitemlistviewaccessible.cpp b/src/kitemviews/kitemlistviewaccessible.cpp index 8df0b0196..a8d80ab52 100644 --- a/src/kitemviews/kitemlistviewaccessible.cpp +++ b/src/kitemviews/kitemlistviewaccessible.cpp @@ -21,10 +21,12 @@ KItemListView *KItemListViewAccessible::view() const return qobject_cast<KItemListView *>(object()); } -KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_) +KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_, KItemListContainerAccessible *parent) : QAccessibleObject(view_) + , m_parent(parent) { Q_ASSERT(view()); + Q_CHECK_PTR(parent); m_cells.resize(childCount()); } @@ -208,8 +210,7 @@ QAccessibleInterface *KItemListViewAccessible::childAt(int x, int y) const QAccessibleInterface *KItemListViewAccessible::parent() const { - // FIXME: return KItemListContainerAccessible here - return nullptr; + return m_parent; } int KItemListViewAccessible::childCount() const diff --git a/src/kitemviews/kitemlistviewaccessible.h b/src/kitemviews/kitemlistviewaccessible.h index 628c32fc2..41aacf367 100644 --- a/src/kitemviews/kitemlistviewaccessible.h +++ b/src/kitemviews/kitemlistviewaccessible.h @@ -18,11 +18,12 @@ class KItemListView; class KItemListContainer; +class KItemListContainerAccessible; class DOLPHIN_EXPORT KItemListViewAccessible : public QAccessibleObject, public QAccessibleTableInterface { public: - explicit KItemListViewAccessible(KItemListView *view); + explicit KItemListViewAccessible(KItemListView *view, KItemListContainerAccessible *parent); ~KItemListViewAccessible() override; void *interface_cast(QAccessible::InterfaceType type) override; @@ -81,6 +82,8 @@ private: QAccessible::Id id; }; mutable QVector<AccessibleIdWrapper> m_cells; + + KItemListContainerAccessible *m_parent; }; class DOLPHIN_EXPORT KItemListAccessibleCell : public QAccessibleInterface, public QAccessibleTableCellInterface diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index cfaf89175..fb985ba23 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -105,7 +105,17 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o Q_UNUSED(option) if (m_alternateBackground) { - const QColor backgroundColor = m_styleOption.palette.color(QPalette::AlternateBase); + QColor backgroundColor = m_styleOption.palette.color(QPalette::AlternateBase); + if (!widget->hasFocus()) { + QColor baseColor = m_styleOption.palette.color(QPalette::Base); + if (baseColor.lightnessF() > 0.5) { + // theme seems light + backgroundColor = backgroundColor.lighter(101); + } else { + // theme seems dark + backgroundColor = backgroundColor.darker(101); + } + } const QRectF backgroundRect(0, 0, size().width(), size().height()); painter->fillRect(backgroundRect, backgroundColor); } |
