X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/a05343530d0f43434715888902067512309098ce..573abcaf25f4629725eafe0282e809e47df1ead3:/src/kitemviews/kitemlistview.cpp diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index fa76c3b00..cf590efce 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -77,10 +77,8 @@ KItemListView::KItemListView(QGraphicsWidget* parent) : m_visibleItems(), m_visibleGroups(), m_visibleCells(), - m_sizeHintResolver(nullptr), m_layouter(nullptr), m_animation(nullptr), - m_layoutTimer(nullptr), m_oldScrollOffset(0), m_oldMaximumScrollOffset(0), m_oldItemOffset(0), @@ -94,7 +92,8 @@ KItemListView::KItemListView(QGraphicsWidget* parent) : m_header(nullptr), m_headerWidget(nullptr), m_indicatorAnimation(nullptr), - m_dropIndicator() + m_dropIndicator(), + m_sizeHintResolver(nullptr) { setAcceptHoverEvents(true); setAcceptTouchEvents(true); @@ -107,11 +106,6 @@ KItemListView::KItemListView(QGraphicsWidget* parent) : connect(m_animation, &KItemListViewAnimation::finished, this, &KItemListView::slotAnimationFinished); - m_layoutTimer = new QTimer(this); - m_layoutTimer->setInterval(300); - m_layoutTimer->setSingleShot(true); - connect(m_layoutTimer, &QTimer::timeout, this, &KItemListView::slotLayoutTimerFinished); - m_rubberBand = new KItemListRubberBand(this); connect(m_rubberBand, &KItemListRubberBand::activationChanged, this, &KItemListView::slotRubberBandActivationChanged); @@ -607,8 +601,8 @@ void KItemListView::setHeaderVisible(bool visible) connect(m_headerWidget, &KItemListHeaderWidget::columnWidthChanged, this, &KItemListView::slotHeaderColumnWidthChanged); - connect(m_headerWidget, &KItemListHeaderWidget::leadingPaddingChanged, - this, &KItemListView::slotLeadingPaddingChanged); + connect(m_headerWidget, &KItemListHeaderWidget::sidePaddingChanged, + this, &KItemListView::slotSidePaddingChanged); connect(m_headerWidget, &KItemListHeaderWidget::columnMoved, this, &KItemListView::slotHeaderColumnMoved); connect(m_headerWidget, &KItemListHeaderWidget::sortOrderChanged, @@ -621,8 +615,8 @@ void KItemListView::setHeaderVisible(bool visible) } else if (!visible && m_headerWidget->isVisible()) { disconnect(m_headerWidget, &KItemListHeaderWidget::columnWidthChanged, this, &KItemListView::slotHeaderColumnWidthChanged); - disconnect(m_headerWidget, &KItemListHeaderWidget::leadingPaddingChanged, - this, &KItemListView::slotLeadingPaddingChanged); + disconnect(m_headerWidget, &KItemListHeaderWidget::sidePaddingChanged, + this, &KItemListView::slotSidePaddingChanged); disconnect(m_headerWidget, &KItemListHeaderWidget::columnMoved, this, &KItemListView::slotHeaderColumnMoved); disconnect(m_headerWidget, &KItemListHeaderWidget::sortOrderChanged, @@ -1335,10 +1329,6 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges, if (updateSizeHints) { m_sizeHintResolver->itemsChanged(index, count, roles); m_layouter->markAsDirty(); - - if (!m_layoutTimer->isActive()) { - m_layoutTimer->start(); - } } // Apply the changed roles to the visible item-widgets @@ -1362,6 +1352,8 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges, ev.setLastRow(itemRange.index + itemRange.count); QAccessible::updateAccessibility(&ev); } + + doLayout(NoAnimation); } void KItemListView::slotGroupsChanged() @@ -1483,12 +1475,6 @@ void KItemListView::slotAnimationFinished(QGraphicsWidget* widget, } } -void KItemListView::slotLayoutTimerFinished() -{ - m_layouter->setSize(geometry().size()); - doLayout(Animation); -} - void KItemListView::slotRubberBandPosChanged() { update(); @@ -1546,7 +1532,7 @@ void KItemListView::slotHeaderColumnWidthChanged(const QByteArray& role, doLayout(NoAnimation); } -void KItemListView::slotLeadingPaddingChanged(qreal width) +void KItemListView::slotSidePaddingChanged(qreal width) { Q_UNUSED(width) if (m_headerWidget->automaticColumnResizing()) { @@ -1746,10 +1732,6 @@ KItemListRubberBand* KItemListView::rubberBand() const void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int changedCount) { - if (m_layoutTimer->isActive()) { - m_layoutTimer->stop(); - } - if (m_activeTransactions > 0) { if (hint == NoAnimation) { // As soon as at least one property change should be done without animation, @@ -1876,6 +1858,8 @@ void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int cha Q_ASSERT(widget->index() == i); widget->setVisible(true); + bool animateIconResizing = animate; + if (widget->size() != itemBounds.size()) { // Resize the widget for the item to the changed size. if (animate) { @@ -1892,11 +1876,13 @@ void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int cha } else { widget->resize(itemBounds.size()); } + } else { + animateIconResizing = false; } const int newIconSize = widget->styleOption().iconSize; if (widget->iconSize() != newIconSize) { - if (animate) { + if (animateIconResizing) { m_animation->start(widget, KItemListViewAnimation::IconResizeAnimation, newIconSize); } else { widget->setIconSize(newIconSize); @@ -2327,7 +2313,7 @@ QHash KItemListView::preferredColumnWidths(const KItemRangeLi void KItemListView::applyColumnWidthsFromHeader() { // Apply the new size to the layouter - const qreal requiredWidth = columnWidthsSum() + m_headerWidget->leadingPadding(); + const qreal requiredWidth = columnWidthsSum() + m_headerWidget->sidePadding(); const QSizeF dynamicItemSize(qMax(size().width(), requiredWidth), m_itemSize.height()); m_layouter->setItemSize(dynamicItemSize); @@ -2345,7 +2331,7 @@ void KItemListView::updateWidgetColumnWidths(KItemListWidget* widget) for (const QByteArray& role : qAsConst(m_visibleRoles)) { widget->setColumnWidth(role, m_headerWidget->columnWidth(role)); } - widget->setLeadingPadding(m_headerWidget->leadingPadding()); + widget->setSidePadding(m_headerWidget->sidePadding()); } void KItemListView::updatePreferredColumnWidths(const KItemRangeList& itemRanges) @@ -2423,7 +2409,9 @@ void KItemListView::applyAutomaticColumnWidths() qreal firstColumnWidth = m_headerWidget->columnWidth(firstRole); QSizeF dynamicItemSize = m_itemSize; - qreal requiredWidth = columnWidthsSum() + m_headerWidget->leadingPadding(); + 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. const qreal availableWidth = size().width(); if (requiredWidth < availableWidth) { // Stretch the first column to use the whole remaining width