┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2013-04-22 21:21:31 +0200
committerFrank Reininghaus <[email protected]>2013-04-22 21:21:31 +0200
commit151c8d8c42115717151d88e17b55b60a74b5e791 (patch)
treecbead109505cc0ff5a1af078929c4055b565c82a /src
parentee2d453f1f3f3efa28d6c9cea1d216a45702dfbc (diff)
Always determine icons for the visible items first
When entering a folder, KFileItemModelRolesUpdater has not yet been informed about the visible index range by the view when it tries to determine icons synchronously. This resulted in the problem that it tried to determine icons for all items in random order, and some visible icons were somtimes still unknown after the "synchronous icon loading" timeout of 200 ms. This commit tries to improve the situation by loading icons starting with the first item in increasing order. This should make it less likely that some visible items still have unknown icons after 200 ms. BUG: 316129 FIXED-IN: 4.10.3 REVIEW: 109843
Diffstat (limited to 'src')
-rw-r--r--src/kitemviews/kfileitemlistview.cpp1
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp17
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.h3
-rw-r--r--src/kitemviews/kitemlistview.cpp5
-rw-r--r--src/kitemviews/kitemlistview.h2
5 files changed, 27 insertions, 1 deletions
diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp
index b7f7455b4..70ce11b1f 100644
--- a/src/kitemviews/kfileitemlistview.cpp
+++ b/src/kitemviews/kfileitemlistview.cpp
@@ -323,6 +323,7 @@ void KFileItemListView::updateVisibleIndexRange()
const int index = firstVisibleIndex();
const int count = lastVisibleIndex() - index + 1;
+ m_modelRolesUpdater->setMaximumVisibleItems(maximumVisibleItems());
m_modelRolesUpdater->setVisibleIndexRange(index, count);
if (m_updateIconSizeTimer->isActive()) {
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index 9fca8a1f6..39d01e232 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -79,6 +79,7 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
m_iconSize(),
m_firstVisibleIndex(0),
m_lastVisibleIndex(-1),
+ m_maximumVisibleItems(100),
m_roles(),
m_enabledPlugins(),
m_pendingVisibleItems(),
@@ -178,6 +179,11 @@ void KFileItemModelRolesUpdater::setVisibleIndexRange(int index, int count)
}
}
+void KFileItemModelRolesUpdater::setMaximumVisibleItems(int count)
+{
+ m_maximumVisibleItems = count;
+}
+
void KFileItemModelRolesUpdater::setPreviewsShown(bool show)
{
if (show == m_previewShown) {
@@ -670,7 +676,16 @@ void KFileItemModelRolesUpdater::startUpdating(const KItemRangeList& itemRanges)
const int lastIndex = range.index + range.count - 1;
for (int i = range.index; i <= lastIndex; ++i) {
const KFileItem item = m_model->fileItem(i);
- if (!hasValidIndexRange || (i >= m_firstVisibleIndex && i <= m_lastVisibleIndex)) {
+ bool visible;
+ if (hasValidIndexRange) {
+ visible = (i >= m_firstVisibleIndex && i <= m_lastVisibleIndex);
+ } else {
+ // If the view has not informed us about the visible range yet,
+ // just assume that the first items are visible.
+ visible = (i < m_maximumVisibleItems);
+ }
+
+ if (visible) {
m_pendingVisibleItems.insert(item);
} else {
m_pendingInvisibleItems.insert(item);
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h
index 68559d8dd..b837e8c7f 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.h
+++ b/src/kitemviews/kfileitemmodelrolesupdater.h
@@ -77,6 +77,8 @@ public:
*/
void setVisibleIndexRange(int index, int count);
+ void setMaximumVisibleItems(int count);
+
/**
* If \a show is set to true, the "iconPixmap" role will be filled with a preview
* of the file. If \a show is false the MIME type icon will be used for the "iconPixmap"
@@ -254,6 +256,7 @@ private:
QSize m_iconSize;
int m_firstVisibleIndex;
int m_lastVisibleIndex;
+ int m_maximumVisibleItems;
QSet<QByteArray> m_roles;
QSet<QByteArray> m_resolvableRoles;
QStringList m_enabledPlugins;
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index 9ebad7f8b..763b7e68f 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -208,6 +208,11 @@ qreal KItemListView::maximumItemOffset() const
return m_layouter->maximumItemOffset();
}
+int KItemListView::maximumVisibleItems() const
+{
+ return m_layouter->maximumVisibleItems();
+}
+
void KItemListView::setVisibleRoles(const QList<QByteArray>& roles)
{
const QList<QByteArray> previousRoles = m_visibleRoles;
diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h
index cd59ddcb5..6d609a9df 100644
--- a/src/kitemviews/kitemlistview.h
+++ b/src/kitemviews/kitemlistview.h
@@ -92,6 +92,8 @@ public:
qreal maximumItemOffset() const;
+ int maximumVisibleItems() const;
+
void setVisibleRoles(const QList<QByteArray>& roles);
QList<QByteArray> visibleRoles() const;