diff options
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/accessibility/kitemlistviewaccessible.cpp | 2 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 2 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.cpp | 46 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 8 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.h | 6 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 2 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.h | 3 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistwidget.cpp | 16 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistwidget.h | 1 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistwidget.cpp | 7 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistwidget.h | 1 | ||||
| -rw-r--r-- | src/kitemviews/private/kfileitemmodelfilter.h | 3 |
12 files changed, 67 insertions, 30 deletions
diff --git a/src/kitemviews/accessibility/kitemlistviewaccessible.cpp b/src/kitemviews/accessibility/kitemlistviewaccessible.cpp index 21bf7a3f6..0107f3b55 100644 --- a/src/kitemviews/accessibility/kitemlistviewaccessible.cpp +++ b/src/kitemviews/accessibility/kitemlistviewaccessible.cpp @@ -34,7 +34,7 @@ KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_, KItemList { Q_ASSERT(view()); Q_ASSERT(parent); - m_accessibleDelegates.resize(childCount()); + m_accessibleDelegates.resize(view()->model()->count()); m_announceCurrentItemTimer = new QTimer{view_}; m_announceCurrentItemTimer->setSingleShot(true); diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 72c3d1410..0bfc74155 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1155,7 +1155,7 @@ void KFileItemModel::applyFilters() // ===STEP 3=== // Handles the ancestorsOfNewVisibleItems. // Now that we are done iterating through m_filteredItems we can safely move the ancestorsOfNewVisibleItems from m_filteredItems to newVisibleItems. - for (it = ancestorsOfNewVisibleItems.begin(); it != ancestorsOfNewVisibleItems.end(); it++) { + for (it = ancestorsOfNewVisibleItems.begin(); it != ancestorsOfNewVisibleItems.end(); ++it) { if (m_filteredItems.remove(it.key())) { // m_filteredItems still contained this ancestor until now so we can be sure that we aren't adding a duplicate ancestor to newVisibleItems. newVisibleItems.append(it.value()); diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 0f4816424..38fa58436 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -1288,36 +1288,40 @@ void KFileItemModelRolesUpdater::startDirectorySizeCounting(const KFileItem &ite m_model->setData(index, data); connect(m_model, &KFileItemModel::itemsChanged, this, &KFileItemModelRolesUpdater::slotItemsChanged); - auto listJob = KIO::listDir(url, KIO::HideProgressInfo); + // Use KIO flags to exclude dot entries at the source to simplify counting + KIO::ListJob::ListFlags flags = KIO::ListJob::ListFlag::ExcludeDotAndDotDot; + if (!m_model->showHiddenFiles()) { + flags |= KIO::ListJob::ListFlag::ExcludeHidden; + } + + auto listJob = KIO::listDir(url, KIO::HideProgressInfo, flags); - QObject::connect(listJob, &KIO::ListJob::entries, this, [this, item](const KJob *job, const KIO::UDSEntryList &list) { + // Define a local counter to accumulate results for THIS specific job instance. + // Using a shared pointer allows the lambda batches to share and update the same state. + auto totalCount = std::make_shared<int>(0); + + QObject::connect(listJob, &KIO::ListJob::entries, this, [this, item, totalCount](const KJob *job, const KIO::UDSEntryList &list) { + Q_UNUSED(job) int index = m_model->index(item); if (index < 0) { return; } - auto data = m_model->data(index); - int origCount = data.value("count").toInt(); - // Get the amount of processed items... - int entryCount = job->processedAmount(KJob::Bytes); - - // ...and then remove the unwanted items from the amount. - for (const KIO::UDSEntry &entry : list) { - const auto name = entry.stringValue(KIO::UDSEntry::UDS_NAME); - if (name == QStringLiteral("..") || name == QStringLiteral(".")) { - --entryCount; - continue; - } - if (!m_model->showHiddenFiles() && name.startsWith(QLatin1Char('.'))) { - --entryCount; - continue; - } - if (m_model->showDirectoriesOnly() && !entry.isDir()) { - --entryCount; - continue; + // Accumulate entries for this batch into our job-specific counter + if (!m_model->showDirectoriesOnly()) { + *totalCount += list.size(); + } else { + for (const KIO::UDSEntry &entry : list) { + if (entry.isDir()) { + (*totalCount)++; + } } } + const int entryCount = *totalCount; + auto data = m_model->data(index); + int origCount = data.value("count").toInt(); + QHash<QByteArray, QVariant> newData; QVariant expandable = data.value("isExpandable"); if (expandable.isNull() || expandable.toBool() != (entryCount > 0)) { diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index e87ed3c18..b1927fc71 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -604,6 +604,10 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent *event, const const Qt::MouseButtons buttons = event->buttons(); + if (!m_pressedIndex.has_value()) { + Q_EMIT clickViewBackground(event->button()); + } + if (!onPress(event->pos(), event->modifiers(), buttons)) { startRubberBand(); return false; @@ -873,7 +877,7 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent *event, cons } else { m_autoActivationTimer->stop(); - if (newHoveredWidget && newHoveredWidget->isHovered()) { + if (newHoveredWidget->isHovered()) { newHoveredWidget->setHovered(false); Q_EMIT itemUnhovered(index); } @@ -1807,7 +1811,7 @@ bool KItemListController::onRelease(const QPointF &pos, const Qt::KeyboardModifi return true; } - if (!isAboveSelectionToggle && m_selectionTogglePressed) { + if (m_selectionTogglePressed) { m_selectionManager->setSelected(m_pressedIndex.value_or(-1), 1, KItemListSelectionManager::Toggle); m_selectionTogglePressed = false; return true; diff --git a/src/kitemviews/kitemlistcontroller.h b/src/kitemviews/kitemlistcontroller.h index 6379acbd8..38a4b6038 100644 --- a/src/kitemviews/kitemlistcontroller.h +++ b/src/kitemviews/kitemlistcontroller.h @@ -223,6 +223,12 @@ Q_SIGNALS: void swipeUp(); /** + * Emitted when the view's background is clicked. + * Used to trigger a user configured action. + */ + void clickViewBackground(Qt::MouseButton button); + + /** * Emitted when the view's background is double-clicked. * Used to trigger an user configured action. */ diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 452567f05..b87216d4b 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -353,6 +353,8 @@ void KItemListView::setAccessibleParentsObject(KItemListContainer *accessiblePar { Q_ASSERT(!m_accessibleParent); m_accessibleParent = new KItemListContainerAccessible(accessibleParentsObject); + // Make sure Qt's accessibility cache takes ownership; tests have no AT client. + QAccessible::queryAccessibleInterface(accessibleParentsObject); } KItemListContainerAccessible *KItemListView::accessibleParent() { diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index c8ab796a9..8dc83d528 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -866,6 +866,9 @@ public: KItemListWidgetCreator(); ~KItemListWidgetCreator() override; + KItemListWidgetCreator(const KItemListWidgetCreator &) = delete; + KItemListWidgetCreator &operator=(const KItemListWidgetCreator &) = delete; + KItemListWidget *create(KItemListView *view) override; void calculateItemSizeHints(QVector<std::pair<qreal, bool>> &logicalHeightHints, qreal &logicalWidthHint, const KItemListView *view) const override; diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index 32118c569..1650ea190 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -506,6 +506,11 @@ void KItemListWidget::hoveredChanged(bool hovered) Q_UNUSED(hovered) } +void KItemListWidget::pressedChanged(bool pressed) +{ + Q_UNUSED(pressed) +} + void KItemListWidget::alternateBackgroundChanged(bool enabled) { Q_UNUSED(enabled) @@ -616,6 +621,7 @@ void KItemListWidget::setPressed(bool enabled) if (m_clickHighlighted != enabled) { m_clickHighlighted = enabled; clearHoverCache(); + pressedChanged(enabled); update(); } } @@ -634,18 +640,18 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS // TODO: Remove this check after Plasma 6.8 release // See: https://invent.kde.org/plasma/breeze/-/merge_requests/595 if (style()->name() == QStringLiteral("breeze")) { - QColor backgroundColor{widget->palette().color(QPalette::Highlight)}; + QColor backgroundColor{widget->palette().color(QPalette::Active, QPalette::Highlight)}; backgroundColor.setAlphaF(0.0); if (m_clickHighlighted) { backgroundColor.setAlphaF(1.0); } else { if (m_selected && m_hovered) { - backgroundColor.setAlphaF(0.40); + backgroundColor.setAlphaF(0.85); } else if (m_selected) { - backgroundColor.setAlphaF(0.32); + backgroundColor.setAlphaF(0.70); } else if (m_hovered) { backgroundColor = widget->palette().color(QPalette::Text); - backgroundColor.setAlphaF(0.06); + backgroundColor.setAlphaF(0.12); } } painter->setRenderHint(QPainter::Antialiasing); @@ -658,7 +664,7 @@ void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QS // Focus decoration if (current) { - QColor focusColor{widget->palette().color(QPalette::Highlight)}; + QColor focusColor{widget->palette().color(QPalette::Active, QPalette::Highlight)}; // Set the pen color lighter or darker depending on background color focusColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? focusColor.darker(110) : focusColor.lighter(110); focusColor.setAlphaF(m_selected || m_hovered ? 1.0 : 0.8); diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h index b87a3b34e..100c13466 100644 --- a/src/kitemviews/kitemlistwidget.h +++ b/src/kitemviews/kitemlistwidget.h @@ -214,6 +214,7 @@ protected: virtual void currentChanged(bool current); virtual void selectedChanged(bool selected); virtual void hoveredChanged(bool hovered); + virtual void pressedChanged(bool pressed); virtual void alternateBackgroundChanged(bool enabled); virtual void siblingsInformationChanged(const QBitArray ¤t, const QBitArray &previous); virtual void editedRoleChanged(const QByteArray ¤t, const QByteArray &previous); diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index ddbb8b6a1..036aff608 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -828,6 +828,13 @@ void KStandardItemListWidget::selectedChanged(bool selected) m_dirtyContent = true; } +void KStandardItemListWidget::pressedChanged(bool pressed) +{ + Q_UNUSED(pressed) + updateAdditionalInfoTextColor(); + m_dirtyContent = true; +} + void KStandardItemListWidget::siblingsInformationChanged(const QBitArray ¤t, const QBitArray &previous) { Q_UNUSED(current) diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index e0a32b745..2b2412abb 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -180,6 +180,7 @@ protected: void styleOptionChanged(const KItemListStyleOption ¤t, const KItemListStyleOption &previous) override; void hoveredChanged(bool hovered) override; void selectedChanged(bool selected) override; + void pressedChanged(bool pressed) override; void siblingsInformationChanged(const QBitArray ¤t, const QBitArray &previous) override; void editedRoleChanged(const QByteArray ¤t, const QByteArray &previous) override; void iconSizeChanged(int current, int previous) override; diff --git a/src/kitemviews/private/kfileitemmodelfilter.h b/src/kitemviews/private/kfileitemmodelfilter.h index 9d93d42cc..4559f880f 100644 --- a/src/kitemviews/private/kfileitemmodelfilter.h +++ b/src/kitemviews/private/kfileitemmodelfilter.h @@ -28,6 +28,9 @@ public: KFileItemModelFilter(); virtual ~KFileItemModelFilter(); + KFileItemModelFilter(const KFileItemModelFilter &) = delete; + KFileItemModelFilter &operator=(const KFileItemModelFilter &) = delete; + /** Filtering modes of KFileItemModelFilter */ enum FilterMode { /** Substring matching. */ |
