Skip to content

Commit 148959e

Browse files
authored
Merge pull request #4361 from ales-erjavec/owhierclust-clear-opt
[FIX] DendrogramWidget: Remove event filters before removing items
2 parents 4256b16 + f625de0 commit 148959e

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

Orange/widgets/unsupervised/owhierarchicalclustering.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -311,15 +311,26 @@ def __init__(self, parent=None, root=None, orientation=Left,
311311
self.setParentItem(parent)
312312

313313
def clear(self):
314+
# Remove event filter from all items before removal.
315+
# Each removeItem is linear in number of installed filters in the whole
316+
# scene -> so this would be quadratic for us (not accounting any other
317+
# filters not part of DendrogramWidget).
314318
for item in self._items.values():
315-
item.setParentItem(None)
316-
if item.scene() is self.scene() and self.scene() is not None:
317-
self.scene().removeItem(item)
319+
item.removeSceneEventFilter(self)
320+
scene = self.scene()
321+
if scene is not None:
322+
scene.removeItem(self._itemgroup)
323+
else:
324+
self._itemgroup.setParentItem(None)
325+
self._itemgroup = QGraphicsWidget(self)
326+
self._itemgroup.setGeometry(self.contentsRect())
327+
self._items.clear()
318328

319329
for item in self._selection.values():
320-
item.setParentItem(None)
321-
if item.scene():
322-
item.scene().removeItem(item)
330+
if scene is not None:
331+
scene.removeItem(item)
332+
else:
333+
item.setParentItem(None)
323334

324335
self._root = None
325336
self._items = {}

0 commit comments

Comments
 (0)