┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2014-05-13 18:42:05 +0200
committerFrank Reininghaus <[email protected]>2014-05-13 18:42:05 +0200
commit4cf04b91dd8804f2536fc31ae2f1b486bfc8cf9c (patch)
tree75aee505fe55fabedf33fa202cc4b4e4f6481a71 /src/kitemviews
parent7e92abb4ea2c2b269d21973bc9f2e76da5fb9114 (diff)
parent5780fab172e02c3dd44082aa10d37cd87a98e29b (diff)
Merge remote-tracking branch 'origin/master' into frameworks
Since the master branch had never been merged into frameworks since the creation of the frameworks branch, I had to fix a couple of merge conflicts and make another change in order to make it build - I hope I did not get anything wrong. We should probably merge master into frameworks on a regular basis from now on. CCMAIL:[email protected] Conflicts: dolphin/src/dolphinmainwindow.cpp dolphin/src/search/dolphinfacetswidget.cpp dolphin/src/statusbar/dolphinstatusbar.cpp dolphin/src/views/dolphinview.cpp
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kfileitemlistwidget.cpp18
-rw-r--r--src/kitemviews/kfileitemlistwidget.h2
-rw-r--r--src/kitemviews/kfileitemmodel.cpp2
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp14
-rw-r--r--src/kitemviews/kitemlistselectionmanager.cpp11
-rw-r--r--src/kitemviews/kitemliststyleoption.cpp6
-rw-r--r--src/kitemviews/kitemliststyleoption.h3
-rw-r--r--src/kitemviews/kitemlistview.cpp44
-rw-r--r--src/kitemviews/kitemlistview.h3
-rw-r--r--src/kitemviews/kitemlistwidget.cpp7
-rw-r--r--src/kitemviews/kitemlistwidget.h2
-rw-r--r--src/kitemviews/kstandarditemlistwidget.cpp61
-rw-r--r--src/kitemviews/kstandarditemlistwidget.h12
-rw-r--r--src/kitemviews/private/kdirectorycontentscounter.cpp15
-rw-r--r--src/kitemviews/private/kitemlistselectiontoggle.cpp33
-rw-r--r--src/kitemviews/private/kitemlistselectiontoggle.h4
-rw-r--r--src/kitemviews/private/kitemlistviewanimation.cpp4
17 files changed, 180 insertions, 61 deletions
diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp
index 688a4da08..fe8c7e997 100644
--- a/src/kitemviews/kfileitemlistwidget.cpp
+++ b/src/kitemviews/kfileitemlistwidget.cpp
@@ -46,6 +46,15 @@ QString KFileItemListWidgetInformant::itemText(int index, const KItemListView* v
return item.text();
}
+bool KFileItemListWidgetInformant::itemIsLink(int index, const KItemListView* view) const
+{
+ Q_ASSERT(qobject_cast<KFileItemModel*>(view->model()));
+ KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(view->model());
+
+ const KFileItem item = fileItemModel->fileItem(index);
+ return item.isLink();
+}
+
QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
const QHash<QByteArray, QVariant>& values) const
{
@@ -81,6 +90,15 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
return text;
}
+QFont KFileItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont) const
+{
+ // The customized font should be italic if the file is a symbolic link.
+ QFont font(baseFont);
+ font.setItalic(true);
+ return font;
+}
+
+
KFileItemListWidget::KFileItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) :
KStandardItemListWidget(informant, parent)
{
diff --git a/src/kitemviews/kfileitemlistwidget.h b/src/kitemviews/kfileitemlistwidget.h
index 1d7bc7f01..8e8958b16 100644
--- a/src/kitemviews/kfileitemlistwidget.h
+++ b/src/kitemviews/kfileitemlistwidget.h
@@ -32,7 +32,9 @@ public:
protected:
virtual QString itemText(int index, const KItemListView* view) const;
+ virtual bool itemIsLink(int index, const KItemListView* view) const;
virtual QString roleText(const QByteArray& role, const QHash<QByteArray, QVariant>& values) const;
+ virtual QFont customizedFontForLinks(const QFont& baseFont) const;
};
class LIBDOLPHINPRIVATE_EXPORT KFileItemListWidget : public KStandardItemListWidget
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 066af20f7..196172f1d 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -218,7 +218,7 @@ void KFileItemModel::setShowHiddenFiles(bool show)
m_dirLister->setShowingDotFiles(show);
m_dirLister->emitChanges();
if (show) {
- slotCompleted();
+ dispatchPendingItemsToInsert();
}
}
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
index f45537445..e90f301a9 100644
--- a/src/kitemviews/kitemlistcontroller.cpp
+++ b/src/kitemviews/kitemlistcontroller.cpp
@@ -538,11 +538,10 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const
m_pressedIndex = m_view->itemAt(m_pressedMousePos);
emit mouseButtonPressed(m_pressedIndex, event->buttons());
- if ((event->buttons() & (Qt::XButton1 | Qt::XButton2)) && m_pressedIndex < 0) {
- // Do not select items when clicking the empty part of the view with
- // the back/forward buttons, see https://bugs.kde.org/show_bug.cgi?id=327412.
- // Note that clicking an item with these buttons selects it, see comment in
- // DolphinView::slotMouseButtonPressed(int, Qt::MouseButtons).
+ // TODO: Qt5: Replace Qt::XButton1 by Qt::BackButton and Qt::XButton2 by Qt::ForwardButton
+ if (event->buttons() & (Qt::XButton1 | Qt::XButton2)) {
+ // Do not select items when clicking the back/forward buttons, see
+ // https://bugs.kde.org/show_bug.cgi?id=327412.
return true;
}
@@ -952,8 +951,13 @@ bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent* event, const
if (newHoveredWidget) {
newHoveredWidget->setHovered(true);
+ const QPointF mappedPos = newHoveredWidget->mapFromItem(m_view, pos);
+ newHoveredWidget->setHoverPosition(mappedPos);
emit itemHovered(newHoveredWidget->index());
}
+ } else if (oldHoveredWidget) {
+ const QPointF mappedPos = oldHoveredWidget->mapFromItem(m_view, pos);
+ oldHoveredWidget->setHoverPosition(mappedPos);
}
return false;
diff --git a/src/kitemviews/kitemlistselectionmanager.cpp b/src/kitemviews/kitemlistselectionmanager.cpp
index ebff1a30e..1f0a89d06 100644
--- a/src/kitemviews/kitemlistselectionmanager.cpp
+++ b/src/kitemviews/kitemlistselectionmanager.cpp
@@ -331,6 +331,11 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL
// Store the current selection (needed in the selectionChanged() signal)
const KItemSet previousSelection = selectedItems();
+ // endAnchoredSelection() adds all items between m_currentItem and
+ // m_anchorItem to m_selectedItems. They can then be moved
+ // individually later in this function.
+ endAnchoredSelection();
+
// Update the current item
if (m_currentItem >= itemRange.index && m_currentItem < itemRange.index + itemRange.count) {
const int previousCurrentItem = m_currentItem;
@@ -342,10 +347,8 @@ void KItemListSelectionManager::itemsMoved(const KItemRange& itemRange, const QL
emit currentChanged(newCurrentItem, previousCurrentItem);
}
- // Update the anchor item
- if (m_anchorItem >= itemRange.index && m_anchorItem < itemRange.index + itemRange.count) {
- m_anchorItem = movedToIndexes.at(m_anchorItem - itemRange.index);
- }
+ // Start a new anchored selection.
+ beginAnchoredSelection(m_currentItem);
// Update the selections
if (!m_selectedItems.isEmpty()) {
diff --git a/src/kitemviews/kitemliststyleoption.cpp b/src/kitemviews/kitemliststyleoption.cpp
index ac2587962..edd6363c8 100644
--- a/src/kitemviews/kitemliststyleoption.cpp
+++ b/src/kitemviews/kitemliststyleoption.cpp
@@ -31,7 +31,8 @@ KItemListStyleOption::KItemListStyleOption() :
verticalMargin(-1),
iconSize(-1),
extendedSelectionRegion(false),
- maxTextSize()
+ maxTextLines(0),
+ maxTextWidth(0)
{
}
@@ -45,7 +46,8 @@ KItemListStyleOption::KItemListStyleOption(const KItemListStyleOption& other) :
verticalMargin(other.verticalMargin),
iconSize(other.iconSize),
extendedSelectionRegion(other.extendedSelectionRegion),
- maxTextSize(other.maxTextSize)
+ maxTextLines(other.maxTextLines),
+ maxTextWidth(other.maxTextWidth)
{
}
diff --git a/src/kitemviews/kitemliststyleoption.h b/src/kitemviews/kitemliststyleoption.h
index 1a304fc28..782dd0ec2 100644
--- a/src/kitemviews/kitemliststyleoption.h
+++ b/src/kitemviews/kitemliststyleoption.h
@@ -43,7 +43,8 @@ public:
int verticalMargin;
int iconSize;
bool extendedSelectionRegion;
- QSize maxTextSize;
+ int maxTextLines;
+ int maxTextWidth;
};
#endif
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index abde53904..0090f8620 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -765,7 +765,8 @@ void KItemListView::setStyleOption(const KItemListStyleOption& option)
updateGroupHeaderHeight();
}
- if (animate && previousOption.maxTextSize != option.maxTextSize) {
+ if (animate &&
+ (previousOption.maxTextLines != option.maxTextLines || previousOption.maxTextWidth != option.maxTextWidth)) {
// Animating a change of the maximum text size just results in expensive
// temporary eliding and clipping operations and does not look good visually.
animate = false;
@@ -898,11 +899,23 @@ void KItemListView::onTransactionEnd()
bool KItemListView::event(QEvent* event)
{
- // Forward all events to the controller and handle them there
- if (!m_editingRole && m_controller && m_controller->processEvent(event, transform())) {
- event->accept();
- return true;
+ switch (event->type()) {
+ case QEvent::PaletteChange:
+ updatePalette();
+ break;
+
+ case QEvent::FontChange:
+ updateFont();
+ break;
+
+ default:
+ // Forward all other events to the controller and handle them there
+ if (!m_editingRole && m_controller && m_controller->processEvent(event, transform())) {
+ event->accept();
+ return true;
+ }
}
+
return QGraphicsWidget::event(event);
}
@@ -955,6 +968,27 @@ QList<KItemListWidget*> KItemListView::visibleItemListWidgets() const
return m_visibleItems.values();
}
+void KItemListView::updateFont()
+{
+ if (scene() && !scene()->views().isEmpty()) {
+ KItemListStyleOption option = styleOption();
+ option.font = scene()->views().first()->font();
+ option.fontMetrics = QFontMetrics(option.font);
+
+ setStyleOption(option);
+ }
+}
+
+void KItemListView::updatePalette()
+{
+ if (scene() && !scene()->views().isEmpty()) {
+ KItemListStyleOption option = styleOption();
+ option.palette = scene()->views().first()->palette();
+
+ setStyleOption(option);
+ }
+}
+
void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges)
{
if (m_itemSize.isEmpty()) {
diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h
index f39e73a97..8a522a686 100644
--- a/src/kitemviews/kitemlistview.h
+++ b/src/kitemviews/kitemlistview.h
@@ -388,6 +388,9 @@ protected:
QList<KItemListWidget*> visibleItemListWidgets() const;
+ virtual void updateFont();
+ virtual void updatePalette();
+
protected slots:
virtual void slotItemsInserted(const KItemRangeList& itemRanges);
virtual void slotItemsRemoved(const KItemRangeList& itemRanges);
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
index d02cbe3bb..38f9d0078 100644
--- a/src/kitemviews/kitemlistwidget.cpp
+++ b/src/kitemviews/kitemlistwidget.cpp
@@ -279,6 +279,13 @@ bool KItemListWidget::isHovered() const
return m_hovered;
}
+void KItemListWidget::setHoverPosition(const QPointF& pos)
+{
+ if (m_selectionToggle) {
+ m_selectionToggle->setHovered(m_selectionToggle->contains(pos));
+ }
+}
+
void KItemListWidget::setAlternateBackground(bool enable)
{
if (m_alternateBackground != enable) {
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
index 954629ddd..cfb9155eb 100644
--- a/src/kitemviews/kitemlistwidget.h
+++ b/src/kitemviews/kitemlistwidget.h
@@ -108,6 +108,8 @@ public:
void setHovered(bool hovered);
bool isHovered() const;
+ void setHoverPosition(const QPointF& pos);
+
void setAlternateBackground(bool enable);
bool alternateBackground() const;
diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp
index 18a5391bb..7a9f31a15 100644
--- a/src/kitemviews/kstandarditemlistwidget.cpp
+++ b/src/kitemviews/kstandarditemlistwidget.cpp
@@ -86,16 +86,22 @@ qreal KStandardItemListWidgetInformant::preferredRoleColumnWidth(const QByteArra
const QString text = roleText(role, values);
qreal width = KStandardItemListWidget::columnPadding(option);
+ const QFontMetrics& normalFontMetrics = option.fontMetrics;
+ const QFontMetrics linkFontMetrics(customizedFontForLinks(option.font));
+
if (role == "rating") {
width += KStandardItemListWidget::preferredRatingSize(option).width();
} else {
- width += option.fontMetrics.width(text);
+ // If current item is a link, we use the customized link font metrics instead of the normal font metrics.
+ const QFontMetrics& fontMetrics = itemIsLink(index, view) ? linkFontMetrics : normalFontMetrics;
+
+ width += fontMetrics.width(text);
if (role == "text") {
if (view->supportsItemExpanding()) {
// Increase the width by the expansion-toggle and the current expansion level
const int expandedParentsCount = values.value("expandedParentsCount", 0).toInt();
- const qreal height = option.padding * 2 + qMax(option.iconSize, option.fontMetrics.height());
+ const qreal height = option.padding * 2 + qMax(option.iconSize, fontMetrics.height());
width += (expandedParentsCount + 1) * height;
}
@@ -112,6 +118,11 @@ QString KStandardItemListWidgetInformant::itemText(int index, const KItemListVie
return view->model()->data(index).value("text").toString();
}
+bool KStandardItemListWidgetInformant::itemIsLink(int index, const KItemListView* view) const
+{
+ return false;
+}
+
QString KStandardItemListWidgetInformant::roleText(const QByteArray& role,
const QHash<QByteArray, QVariant>& values) const
{
@@ -122,18 +133,24 @@ QString KStandardItemListWidgetInformant::roleText(const QByteArray& role,
return values.value(role).toString();
}
+QFont KStandardItemListWidgetInformant::customizedFontForLinks(const QFont& baseFont) const
+{
+ return baseFont;
+}
+
void KStandardItemListWidgetInformant::calculateIconsLayoutItemSizeHints(QVector<QSizeF>& sizeHints, const KItemListView* view) const
{
const KItemListStyleOption& option = view->styleOption();
- const QFont& font = option.font;
+ const QFont& normalFont = option.font;
const int additionalRolesCount = qMax(view->visibleRoles().count() - 1, 0);
const qreal itemWidth = view->itemSize().width();
const qreal maxWidth = itemWidth - 2 * option.padding;
- const qreal maxTextHeight = option.maxTextSize.height();
const qreal additionalRolesSpacing = additionalRolesCount * option.fontMetrics.lineSpacing();
const qreal spacingAndIconHeight = option.iconSize + option.padding * 3;
+ const QFont linkFont = customizedFontForLinks(normalFont);
+
QTextOption textOption(Qt::AlignHCenter);
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
@@ -142,6 +159,9 @@ void KStandardItemListWidgetInformant::calculateIconsLayoutItemSizeHints(QVector
continue;
}
+ // If the current item is a link, we use the customized link font instead of the normal font.
+ const QFont& font = itemIsLink(index, view) ? linkFont : normalFont;
+
const QString& text = KStringHandler::preProcessWrap(itemText(index, view));
// Calculate the number of lines required for wrapping the name
@@ -150,20 +170,22 @@ void KStandardItemListWidgetInformant::calculateIconsLayoutItemSizeHints(QVector
layout.setTextOption(textOption);
layout.beginLayout();
QTextLine line;
+ int lineCount = 0;
while ((line = layout.createLine()).isValid()) {
line.setLineWidth(maxWidth);
line.naturalTextWidth();
textHeight += line.height();
+
+ ++lineCount;
+ if (lineCount == option.maxTextLines) {
+ break;
+ }
}
layout.endLayout();
// Add one line for each additional information
textHeight += additionalRolesSpacing;
- if (maxTextHeight > 0 && textHeight > maxTextHeight) {
- textHeight = maxTextHeight;
- }
-
sizeHints[index] = QSizeF(itemWidth, textHeight + spacingAndIconHeight);
}
}
@@ -171,20 +193,25 @@ void KStandardItemListWidgetInformant::calculateIconsLayoutItemSizeHints(QVector
void KStandardItemListWidgetInformant::calculateCompactLayoutItemSizeHints(QVector<QSizeF>& sizeHints, const KItemListView* view) const
{
const KItemListStyleOption& option = view->styleOption();
- const QFontMetrics& fontMetrics = option.fontMetrics;
+ const QFontMetrics& normalFontMetrics = option.fontMetrics;
const int additionalRolesCount = qMax(view->visibleRoles().count() - 1, 0);
const QList<QByteArray>& visibleRoles = view->visibleRoles();
const bool showOnlyTextRole = (visibleRoles.count() == 1) && (visibleRoles.first() == "text");
- const qreal maxWidth = option.maxTextSize.width();
+ const qreal maxWidth = option.maxTextWidth;
const qreal paddingAndIconWidth = option.padding * 4 + option.iconSize;
- const qreal height = option.padding * 2 + qMax(option.iconSize, (1 + additionalRolesCount) * option.fontMetrics.lineSpacing());
+ const qreal height = option.padding * 2 + qMax(option.iconSize, (1 + additionalRolesCount) * normalFontMetrics.lineSpacing());
+
+ const QFontMetrics linkFontMetrics(customizedFontForLinks(option.font));
for (int index = 0; index < sizeHints.count(); ++index) {
if (!sizeHints.at(index).isEmpty()) {
continue;
}
+ // If the current item is a link, we use the customized link font metrics instead of the normal font metrics.
+ const QFontMetrics& fontMetrics = itemIsLink(index, view) ? linkFontMetrics : normalFontMetrics;
+
// For each row exactly one role is shown. Calculate the maximum required width that is necessary
// to show all roles without horizontal clipping.
qreal maximumRequiredWidth = 0.0;
@@ -631,6 +658,12 @@ void KStandardItemListWidget::dataChanged(const QHash<QByteArray, QVariant>& cur
dirtyRoles = roles;
}
+ // The URL might have changed (i.e., if the sort order of the items has
+ // been changed). Therefore, the "is cut" state must be updated.
+ KFileItemClipboard* clipboard = KFileItemClipboard::instance();
+ const KUrl itemUrl = data().value("url").value<KUrl>();
+ m_isCut = clipboard->isCut(itemUrl);
+
// The icon-state might depend from other roles and hence is
// marked as dirty whenever a role has been changed
dirtyRoles.insert("iconPixmap");
@@ -1066,9 +1099,6 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
qreal nameHeight = 0;
QTextLine line;
- const int additionalRolesCount = qMax(visibleRoles().count() - 1, 0);
- const int maxNameLines = (option.maxTextSize.height() / int(lineSpacing)) - additionalRolesCount;
-
QTextLayout layout(nameTextInfo->staticText.text(), m_customizedFont);
layout.setTextOption(nameTextInfo->staticText.textOption());
layout.beginLayout();
@@ -1079,7 +1109,7 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
nameHeight += line.height();
++nameLineIndex;
- if (nameLineIndex == maxNameLines) {
+ if (nameLineIndex == option.maxTextLines) {
// The maximum number of textlines has been reached. If this is
// the case provide an elided text if necessary.
const int textLength = line.textStart() + line.textLength();
@@ -1101,6 +1131,7 @@ void KStandardItemListWidget::updateIconsLayoutTextCache()
layout.endLayout();
// Use one line for each additional information
+ const int additionalRolesCount = qMax(visibleRoles().count() - 1, 0);
nameTextInfo->staticText.setTextWidth(maxWidth);
nameTextInfo->pos = QPointF(padding, widgetHeight -
nameHeight -
diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h
index ca198c36b..ba426d054 100644
--- a/src/kitemviews/kstandarditemlistwidget.h
+++ b/src/kitemviews/kstandarditemlistwidget.h
@@ -54,6 +54,13 @@ protected:
virtual QString itemText(int index, const KItemListView* view) const;
/**
+ * @return The value of the "isLink" role. The default implementation returns false.
+ * The derived class should reimplement this function, when information about
+ * links is available and in usage.
+ */
+ virtual bool itemIsLink(int index, const KItemListView* view) const;
+
+ /**
* @return String representation of the role \a role. The representation of
* a role might depend on other roles, so the values of all roles
* are passed as parameter.
@@ -61,6 +68,11 @@ protected:
virtual QString roleText(const QByteArray& role,
const QHash<QByteArray, QVariant>& values) const;
+ /**
+ * @return A font based on baseFont which is customized for symlinks.
+ */
+ virtual QFont customizedFontForLinks(const QFont& baseFont) const;
+
void calculateIconsLayoutItemSizeHints(QVector<QSizeF>& sizeHints, const KItemListView* view) const;
void calculateCompactLayoutItemSizeHints(QVector<QSizeF>& sizeHints, const KItemListView* view) const;
void calculateDetailsLayoutItemSizeHints(QVector<QSizeF>& sizeHints, const KItemListView* view) const;
diff --git a/src/kitemviews/private/kdirectorycontentscounter.cpp b/src/kitemviews/private/kdirectorycontentscounter.cpp
index 0e43dea2e..cd448e233 100644
--- a/src/kitemviews/private/kdirectorycontentscounter.cpp
+++ b/src/kitemviews/private/kdirectorycontentscounter.cpp
@@ -60,14 +60,23 @@ KDirectoryContentsCounter::~KDirectoryContentsCounter()
{
--m_workersCount;
- if (m_workersCount == 0) {
+ if (m_workersCount > 0) {
+ // The worker thread will continue running. It could even be running
+ // a method of m_worker at the moment, so we delete it using
+ // deleteLater() to prevent a crash.
+ m_worker->deleteLater();
+ } else {
+ // There are no remaining workers -> stop the worker thread.
m_workerThread->quit();
m_workerThread->wait();
delete m_workerThread;
m_workerThread = 0;
- }
- delete m_worker;
+ // The worker thread has finished running now, so it's safe to delete
+ // m_worker. deleteLater() would not work at all because the event loop
+ // which would deliver the event to m_worker is not running any more.
+ delete m_worker;
+ }
}
void KDirectoryContentsCounter::addDirectory(const QString& path)
diff --git a/src/kitemviews/private/kitemlistselectiontoggle.cpp b/src/kitemviews/private/kitemlistselectiontoggle.cpp
index 6bbf3c2ec..accbe5181 100644
--- a/src/kitemviews/private/kitemlistselectiontoggle.cpp
+++ b/src/kitemviews/private/kitemlistselectiontoggle.cpp
@@ -30,7 +30,6 @@ KItemListSelectionToggle::KItemListSelectionToggle(QGraphicsItem* parent) :
m_checked(false),
m_hovered(false)
{
- setAcceptHoverEvents(true);
}
KItemListSelectionToggle::~KItemListSelectionToggle()
@@ -51,6 +50,15 @@ bool KItemListSelectionToggle::isChecked() const
return m_checked;
}
+void KItemListSelectionToggle::setHovered(bool hovered)
+{
+ if (m_hovered != hovered) {
+ m_hovered = hovered;
+ m_pixmap = QPixmap();
+ update();
+ }
+}
+
void KItemListSelectionToggle::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
Q_UNUSED(option);
@@ -65,20 +73,6 @@ void KItemListSelectionToggle::paint(QPainter* painter, const QStyleOptionGraphi
painter->drawPixmap(x, y, m_pixmap);
}
-void KItemListSelectionToggle::hoverEnterEvent(QGraphicsSceneHoverEvent* event)
-{
- QGraphicsWidget::hoverEnterEvent(event);
- m_hovered = true;
- m_pixmap = QPixmap();
-}
-
-void KItemListSelectionToggle::hoverLeaveEvent(QGraphicsSceneHoverEvent* event)
-{
- QGraphicsWidget::hoverLeaveEvent(event);
- m_hovered = false;
- m_pixmap = QPixmap();
-}
-
void KItemListSelectionToggle::resizeEvent(QGraphicsSceneResizeEvent* event)
{
QGraphicsWidget::resizeEvent(event);
@@ -97,12 +91,9 @@ void KItemListSelectionToggle::resizeEvent(QGraphicsSceneResizeEvent* event)
void KItemListSelectionToggle::updatePixmap()
{
- const char* icon = m_checked ? "list-remove" : "list-add";
- m_pixmap = KIconLoader::global()->loadIcon(QLatin1String(icon), KIconLoader::NoGroup, iconSize());
-
- if (m_hovered) {
- KIconLoader::global()->iconEffect()->apply(m_pixmap, KIconLoader::Desktop, KIconLoader::ActiveState);
- }
+ const QString icon = m_checked ? "list-remove" : "list-add";
+ const KIconLoader::States state = m_hovered ? KIconLoader::ActiveState : KIconLoader::DisabledState;
+ m_pixmap = KIconLoader::global()->loadIcon(icon, KIconLoader::Desktop, iconSize(), state);
}
int KItemListSelectionToggle::iconSize() const
diff --git a/src/kitemviews/private/kitemlistselectiontoggle.h b/src/kitemviews/private/kitemlistselectiontoggle.h
index ba29293f6..758dc63bb 100644
--- a/src/kitemviews/private/kitemlistselectiontoggle.h
+++ b/src/kitemviews/private/kitemlistselectiontoggle.h
@@ -41,11 +41,11 @@ public:
void setChecked(bool checked);
bool isChecked() const;
+ void setHovered(bool hovered);
+
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
protected:
- virtual void hoverEnterEvent(QGraphicsSceneHoverEvent* event);
- virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent* event);
virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
private:
diff --git a/src/kitemviews/private/kitemlistviewanimation.cpp b/src/kitemviews/private/kitemlistviewanimation.cpp
index 1ddeb2b19..43eed98c5 100644
--- a/src/kitemviews/private/kitemlistviewanimation.cpp
+++ b/src/kitemviews/private/kitemlistviewanimation.cpp
@@ -225,13 +225,13 @@ void KItemListViewAnimation::slotFinished()
{
QPropertyAnimation* finishedAnim = qobject_cast<QPropertyAnimation*>(sender());
for (int type = 0; type < AnimationTypeCount; ++type) {
- QHashIterator<QGraphicsWidget*, QPropertyAnimation*> it(m_animation[type]);
+ QMutableHashIterator<QGraphicsWidget*, QPropertyAnimation*> it(m_animation[type]);
while (it.hasNext()) {
it.next();
QPropertyAnimation* propertyAnim = it.value();
if (propertyAnim == finishedAnim) {
QGraphicsWidget* widget = it.key();
- m_animation[type].remove(widget);
+ it.remove();
finishedAnim->deleteLater();
emit finished(widget, static_cast<AnimationType>(type));