Commit daf12b8e authored by Frank Reininghaus's avatar Frank Reininghaus

Prevent repeated re-layouting of all items while previews are generated

There was some code in KStandardItemListView::itemSizeHintUpdateRequired
already that was supposed to prevent an expensive re-layouting of all
items when a preview is received. However, it didn't quite work as
intended because also the "iconOverlays" role changed.

The new approach is to only re-layout if text of a visible role changes,
because this is the only way how the space needed by an item might
change (see KStandardItemListWidgetInformant::itemSizeHint()).

BUG: 315315
FIXED-IN: 4.10.1
REVIEW: 108984
parent 1cdbf2e5
......@@ -104,17 +104,17 @@ void KStandardItemListView::initializeItemListWidget(KItemListWidget* item)
bool KStandardItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray>& changedRoles) const
{
// The only thing that can modify the item's size hint is the amount of space
// needed to display the text for the visible roles.
// Even if the icons have a different size they are always aligned within
// the area defined by KItemStyleOption.iconSize and hence result in no
// change of the item-size.
const bool containsIconName = changedRoles.contains("iconName");
const bool containsIconPixmap = changedRoles.contains("iconPixmap");
const int count = changedRoles.count();
const bool iconChanged = (containsIconName && containsIconPixmap && count == 2) ||
(containsIconName && count == 1) ||
(containsIconPixmap && count == 1);
return !iconChanged;
foreach (const QByteArray& role, visibleRoles()) {
if (changedRoles.contains(role)) {
return true;
}
}
return false;
}
void KStandardItemListView::onItemLayoutChanged(ItemLayout current, ItemLayout previous)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment