Skip to content

Commit a5a6cc9

Browse files
committed
listfilter: Bypass QListView.dropEvent
On Qt >= 5.15.2 QListView.dropEvent depends on private state tracking that is setup in startDrag. Since startDrag is overridden here and does not dispatch to the base implementation, this causes items loss when performing internal move.
1 parent 0434bc5 commit a5a6cc9

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

Orange/widgets/utils/listfilter.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from AnyQt.QtWidgets import QListView, QLineEdit, QCompleter
1+
from AnyQt.QtWidgets import QListView, QLineEdit, QCompleter, QAbstractItemView
22
from AnyQt.QtGui import QDrag
33
from AnyQt.QtCore import (
44
Qt, QObject, QEvent, QModelIndex,
@@ -85,6 +85,13 @@ def startDrag(self, supported_actions):
8585
delslice(self.model(), s1, s2)
8686
self.dragDropActionDidComplete.emit(res)
8787

88+
def dropEvent(self, event):
89+
# Bypass QListView.dropEvent on Qt >= 5.15.2.
90+
# Because `startDrag` is overridden and does not dispatch to base
91+
# implementation then `dropEvent` would need to be overridden also
92+
# (private `d->dropEventMoved` state tracking due to QTBUG-87057 fix).
93+
QAbstractItemView.dropEvent(self, event)
94+
8895
def dragEnterEvent(self, event):
8996
"""
9097
Reimplemented from QListView.dragEnterEvent

0 commit comments

Comments
 (0)