From cce46d8e3491ac2ea66f904bc15730f0ea1c9fcc Mon Sep 17 00:00:00 2001 From: Pierre Risch Date: Wed, 15 Apr 2026 09:23:55 +0000 Subject: [PATCH 1/2] Publisher instances sort by folder path and product name and fix shift selection --- .../publisher/widgets/card_view_widgets.py | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index a9abd565844..bc55dae4eb2 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -816,7 +816,11 @@ def refresh(self): widget_idx += 1 - instances = instances_by_group[group_name] + instances = sorted( + instances_by_group[group_name], + key=lambda i: (i.get_folder_path(), getattr(i, "product_name", "")) + ) + for instance in instances: group_by_instance_id[instance.id] = group_name instance_ids_by_group_name[group_name].append(instance.id) @@ -891,37 +895,34 @@ def _update_instance_widgets( ) - set(instances_by_id) group_widget.take_widgets(to_remove_ids) - # Sort instances by product name - sorted_product_names = list(sorted(instances_by_product_name.keys())) - # Add new instances to widget ordered_ids = [] widgets_by_id = {} - for product_names in sorted_product_names: - for instance in instances_by_product_name[product_names]: - context_info = context_info_by_id[instance.id] - is_parent_active = parent_active_by_id[instance.id] - if instance.id in self._widgets_by_id: - widget = self._widgets_by_id[instance.id] - widget.update_instance( - instance, context_info, is_parent_active - ) - else: - group_icon = group_icons[instance.creator_identifier] - widget = InstanceCardWidget( - instance, - context_info, - is_parent_active, - group_icon, - group_widget, - ) - widget.selected.connect(self._on_widget_selection) - widget.active_changed.connect(self._on_active_changed) - widget.double_clicked.connect(self.double_clicked) - self._widgets_by_id[instance.id] = widget - ordered_ids.append(instance.id) - widgets_by_id[instance.id] = widget + for instance in instances: + context_info = context_info_by_id[instance.id] + is_parent_active = parent_active_by_id[instance.id] + if instance.id in self._widgets_by_id: + widget = self._widgets_by_id[instance.id] + widget.update_instance( + instance, context_info, is_parent_active + ) + else: + group_icon = group_icons[instance.creator_identifier] + widget = InstanceCardWidget( + instance, + context_info, + is_parent_active, + group_icon, + group_widget, + ) + widget.selected.connect(self._on_widget_selection) + widget.active_changed.connect(self._on_active_changed) + widget.double_clicked.connect(self.double_clicked) + self._widgets_by_id[instance.id] = widget + + ordered_ids.append(instance.id) + widgets_by_id[instance.id] = widget group_widget.set_widgets(widgets_by_id, ordered_ids) From 5ffbfb8e49529ab9b3c25af725ff22ea946452a0 Mon Sep 17 00:00:00 2001 From: rischpierre <59099837+rischpierre@users.noreply.github.com> Date: Wed, 22 Apr 2026 13:51:27 +0200 Subject: [PATCH 2/2] Apply suggestion from @iLLiCiTiT Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../tools/publisher/widgets/card_view_widgets.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py index bc55dae4eb2..71e2c9b7785 100644 --- a/client/ayon_core/tools/publisher/widgets/card_view_widgets.py +++ b/client/ayon_core/tools/publisher/widgets/card_view_widgets.py @@ -816,12 +816,10 @@ def refresh(self): widget_idx += 1 - instances = sorted( + for instance in sorted( instances_by_group[group_name], - key=lambda i: (i.get_folder_path(), getattr(i, "product_name", "")) - ) - - for instance in instances: + key=lambda i: (i.get_folder_path() or "", i.product_name)) + ): group_by_instance_id[instance.id] = group_name instance_ids_by_group_name[group_name].append(instance.id)