# UNDF: UNDF-2026-000001216 --- a/plugins/dockers/layerdocker/NodeDelegate.h +++ b/plugins/dockers/layerdocker/NodeDelegate.h @@ -71,7 +71,7 @@ private: void toggleProperty(KisBaseNode::PropertyList &props, const OptionalProperty clickedProperty, const Qt::KeyboardModifiers modifier, const QModelIndex &index); - void togglePropertyRecursive(const QModelIndex &root, const OptionalProperty &clickedProperty, const QList &items, StasisOperation record, bool mode); + void togglePropertyRecursive(const QModelIndex &root, const OptionalProperty &clickedProperty, const QSet &items, StasisOperation record, bool mode); bool stasisIsDirty(const QModelIndex &root, const OptionalProperty &clickedProperty, bool on = false, bool off = false); --- a/plugins/dockers/layerdocker/NodeDelegate.cpp +++ b/plugins/dockers/layerdocker/NodeDelegate.cpp @@ -548,7 +548,10 @@ void NodeDelegate::Private::toggleProperty(KisBaseNode::PropertyList &props, con getParentsIndex(items, index); getChildrenIndex(items, index); } - togglePropertyRecursive(root, clickedProperty, items, record, mode); + // Convert to QSet for O(1) membership test in togglePropertyRecursive. + // QList::contains is O(N); with N layers and N items this is O(N^2) per click. + QSet itemsSet(items.begin(), items.end()); + togglePropertyRecursive(root, clickedProperty, itemsSet, record, mode); } else { @@ -576,7 +579,7 @@ void NodeDelegate::Private::toggleProperty(KisBaseNode::PropertyList &props, con } -void NodeDelegate::Private::togglePropertyRecursive(const QModelIndex &root, const OptionalProperty &clickedProperty, const QList &items, StasisOperation record, bool mode) +void NodeDelegate::Private::togglePropertyRecursive(const QModelIndex &root, const OptionalProperty &clickedProperty, const QSet &items, StasisOperation record, bool mode) { int rowCount = view->model()->rowCount(root);