]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.cpp
KItemListView: Don't allow starting role editing when animation is running
[dolphin.git] / src / kitemviews / kitemlistview.cpp
index 265e41e6ca3dfec63542e19bb91c45498d481608..75d85be358953e7897936800d303142b183ef9f5 100644 (file)
@@ -425,7 +425,7 @@ std::optional<int> KItemListView::itemAt(const QPointF &pos) const
 
         const KItemListWidget *widget = it.value();
         const QPointF mappedPos = widget->mapFromItem(this, pos);
-        if (widget->contains(mappedPos) || widget->selectionRect().contains(mappedPos)) {
+        if (widget->contains(mappedPos)) {
             return it.key();
         }
     }
@@ -542,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const
 
     const KItemListWidget *widget = m_visibleItems.value(index);
     if (widget) {
-        contextRect = widget->iconRect() | widget->textRect();
+        contextRect = widget->selectionRectCore();
         contextRect.translate(itemRect(index).topLeft());
     }
 
@@ -750,7 +750,11 @@ QPixmap KItemListView::createDragPixmap(const KItemSet &indexes) const
 void KItemListView::editRole(int index, const QByteArray &role)
 {
     KStandardItemListWidget *widget = qobject_cast<KStandardItemListWidget *>(m_visibleItems.value(index));
-    if (!widget || m_editingRole) {
+    if (!widget) {
+        return;
+    }
+    if (m_editingRole || m_animation->isStarted(widget)) {
+        Q_EMIT widget->roleEditingCanceled(index, role, QVariant());
         return;
     }
 
@@ -1916,6 +1920,9 @@ void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int cha
 
         if (animate) {
             if (m_animation->isStarted(widget, KItemListViewAnimation::MovingAnimation)) {
+                if (m_editingRole) {
+                    Q_EMIT widget->roleEditingCanceled(widget->index(), QByteArray(), QVariant());
+                }
                 m_animation->start(widget, KItemListViewAnimation::MovingAnimation, newPos);
                 applyNewPos = false;
             }