┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
-rw-r--r--src/kitemviews/kitemlistview.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index 1d02ee5c0..452567f05 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -771,7 +771,7 @@ void KItemListView::editRole(int index, const QByteArray &role)
connect(widget, &KItemListWidget::roleEditingCanceled, this, &KItemListView::slotRoleEditingCanceled);
connect(widget, &KItemListWidget::roleEditingFinished, this, &KItemListView::slotRoleEditingFinished);
- connect(this, &KItemListView::scrollOffsetChanged, widget, &KStandardItemListWidget::finishRoleEditing);
+ connect(this, &KItemListView::scrollOffsetChanged, widget, &KStandardItemListWidget::updateRoleEditorGeometry);
}
void KItemListView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
@@ -1092,6 +1092,20 @@ bool KItemListView::event(QEvent *event)
return true;
break;
+ case QEvent::GraphicsSceneMousePress:
+ case QEvent::GraphicsSceneMouseDoubleClick:
+ case QEvent::GraphicsSceneContextMenu:
+ if (m_editingRole) {
+ for (KItemListWidget *widget : std::as_const(m_visibleItems)) {
+ auto *standardWidget = qobject_cast<KStandardItemListWidget *>(widget);
+ if (standardWidget && !standardWidget->isVisible() && !standardWidget->editedRole().isEmpty()) {
+ standardWidget->finishRoleEditing();
+ break;
+ }
+ }
+ }
+ [[fallthrough]];
+
default:
// Forward all other events to the controller and handle them there
if (!m_editingRole && m_controller && m_controller->processEvent(event, transform())) {
@@ -2026,6 +2040,10 @@ QList<int> KItemListView::recycleInvisibleItems(int firstVisibleIndex, int lastV
const bool invisible = (index < firstVisibleIndex) || (index > lastVisibleIndex);
if (invisible) {
+ if (!widget->editedRole().isEmpty()) {
+ widget->setVisible(false);
+ continue;
+ }
if (m_animation->isStarted(widget)) {
if (hint == NoAnimation) {
// Stopping the animation will call KItemListView::slotAnimationFinished()