From 40f9cfd519a3244929190146a3215ae12b98270b Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Thu, 29 Mar 2018 09:21:17 +0200 Subject: [PATCH] [KItemListView] Check if KItemListStyleOption actually changed before emitting a change This avoids work being done when it doesn't need to be. For instance, the preview generator waits for everything to have settled using a 200ms timer before generating a preview. This timer fired also in response to onStyleOptionChanged and needlessly delayed preview generation when navigating between folders despite the style option (e.g. icon size, view mode) not having changed. Differential Revision: https://phabricator.kde.org/D11481 --- src/kitemviews/kitemlistgroupheader.cpp | 4 ++++ src/kitemviews/kitemliststyleoption.cpp | 20 ++++++++++++++++++++ src/kitemviews/kitemliststyleoption.h | 5 +++++ src/kitemviews/kitemlistview.cpp | 4 ++++ src/kitemviews/kitemlistwidget.cpp | 5 ++++- src/kitemviews/kstandarditemlistview.cpp | 9 +-------- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/kitemviews/kitemlistgroupheader.cpp b/src/kitemviews/kitemlistgroupheader.cpp index fb9298989..06a32484a 100644 --- a/src/kitemviews/kitemlistgroupheader.cpp +++ b/src/kitemviews/kitemlistgroupheader.cpp @@ -78,6 +78,10 @@ QVariant KItemListGroupHeader::data() const void KItemListGroupHeader::setStyleOption(const KItemListStyleOption& option) { + if (m_styleOption == option) { + return; + } + const KItemListStyleOption previous = m_styleOption; m_styleOption = option; m_dirtyCache = true; diff --git a/src/kitemviews/kitemliststyleoption.cpp b/src/kitemviews/kitemliststyleoption.cpp index 1ebcad141..bcfb86064 100644 --- a/src/kitemviews/kitemliststyleoption.cpp +++ b/src/kitemviews/kitemliststyleoption.cpp @@ -53,3 +53,23 @@ KItemListStyleOption::KItemListStyleOption(const KItemListStyleOption& other) : KItemListStyleOption::~KItemListStyleOption() { } + +bool KItemListStyleOption::operator==(const KItemListStyleOption& other) const +{ + return rect == other.rect + && font == other.font + && fontMetrics == other.fontMetrics + && palette == other.palette + && padding == other.padding + && horizontalMargin == other.horizontalMargin + && verticalMargin == other.verticalMargin + && iconSize == other.iconSize + && extendedSelectionRegion == other.extendedSelectionRegion + && maxTextLines == other.maxTextLines + && maxTextWidth == other.maxTextWidth; +} + +bool KItemListStyleOption::operator!=(const KItemListStyleOption& other) const +{ + return !(*this == other); +} diff --git a/src/kitemviews/kitemliststyleoption.h b/src/kitemviews/kitemliststyleoption.h index 09b787c27..93aafac1f 100644 --- a/src/kitemviews/kitemliststyleoption.h +++ b/src/kitemviews/kitemliststyleoption.h @@ -45,6 +45,11 @@ public: bool extendedSelectionRegion; int maxTextLines; int maxTextWidth; + + bool operator==(const KItemListStyleOption& other) const; + bool operator!=(const KItemListStyleOption& other) const; + + }; #endif diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 489c6f9b6..f0647fb3e 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -752,6 +752,10 @@ void KItemListView::setItemSize(const QSizeF& size) void KItemListView::setStyleOption(const KItemListStyleOption& option) { + if (m_styleOption == option) { + return; + } + const KItemListStyleOption previousOption = m_styleOption; m_styleOption = option; diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index 61dd7256e..28b374620 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -191,10 +191,13 @@ qreal KItemListWidget::columnWidth(const QByteArray& role) const void KItemListWidget::setStyleOption(const KItemListStyleOption& option) { + if (m_styleOption == option) { + return; + } + const KItemListStyleOption previous = m_styleOption; clearHoverCache(); m_styleOption = option; - styleOptionChanged(option, previous); update(); } diff --git a/src/kitemviews/kstandarditemlistview.cpp b/src/kitemviews/kstandarditemlistview.cpp index ee1c06103..929ee1da8 100644 --- a/src/kitemviews/kstandarditemlistview.cpp +++ b/src/kitemviews/kstandarditemlistview.cpp @@ -146,27 +146,20 @@ void KStandardItemListView::applyDefaultStyleOption(int iconSize, { KItemListStyleOption option = styleOption(); - bool changed = false; if (option.iconSize < 0) { option.iconSize = iconSize; - changed = true; } if (option.padding < 0) { option.padding = padding; - changed = true; } if (option.horizontalMargin < 0) { option.horizontalMargin = horizontalMargin; - changed = true; } if (option.verticalMargin < 0) { option.verticalMargin = verticalMargin; - changed = true; } - if (changed) { - setStyleOption(option); - } + setStyleOption(option); } void KStandardItemListView::updateLayoutOfVisibleItems() -- 2.47.3