┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorNate Graham <[email protected]>2023-10-05 09:15:35 -0600
committerNate Graham <[email protected]>2023-10-05 09:15:35 -0600
commit30a807e44afb334dd153c8bcbdbde4f36942bee0 (patch)
treef2bb4b386ac76e257f87689e75db7364c7a12f6c /src/kitemviews
parentb6d9cb9949111fbaf5c875e76619ca7af83c6fc3 (diff)
parentb58fead9beaf3165146d3e536b6b14ae1cc9514d (diff)
Merge branch 'master' into kf6
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp16
-rw-r--r--src/kitemviews/kitemlistview.cpp20
-rw-r--r--src/kitemviews/kitemlistview.h18
-rw-r--r--src/kitemviews/kitemlistviewaccessible.cpp7
-rw-r--r--src/kitemviews/kitemlistviewaccessible.h5
-rw-r--r--src/kitemviews/kitemlistwidget.cpp12
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);
}