diff --git a/source/frontend/patchcanvas/__init__.py b/source/frontend/patchcanvas/__init__.py index 4c651cb32..9bb8e1a01 100644 --- a/source/frontend/patchcanvas/__init__.py +++ b/source/frontend/patchcanvas/__init__.py @@ -137,6 +137,9 @@ class Canvas(object): self.initial_pos = QPointF(0, 0) self.size_rect = QRectF() + self.pending_group_joins = set() + self.pending_position_changes = {} + def callback(self, action, value1, value2, value_str): print("Canvas::callback({}, {}, {}, {})".format(action, value1, value2, value_str)) diff --git a/source/frontend/patchcanvas/patchcanvas.py b/source/frontend/patchcanvas/patchcanvas.py index 695b1d5e8..4a4c46ecb 100644 --- a/source/frontend/patchcanvas/patchcanvas.py +++ b/source/frontend/patchcanvas/patchcanvas.py @@ -393,6 +393,17 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION): canvas.group_list.append(group_dict) + # Callbacks can arrive out of order, so we might have pending events. + if group_id in canvas.pending_group_joins: + joinGroup(group_id) + canvas.pending_group_joins.remove(group_id) + + if group_id in canvas.pending_position_changes: + position_change = canvas.pending_position_changes[group_id] + setGroupPosFull(*position_change) + del canvas.pending_position_changes[group_id] + + if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups: CanvasItemFX(group_box, True, False) else: @@ -595,6 +606,7 @@ def joinGroup(group_id): # FIXME if not (item and s_item): qCritical("PatchCanvas::joinGroup(%i) - unable to find groups to join" % group_id) + canvas.pending_group_joins.add(group_id) return port_list_ids = list(item.getPortList()) @@ -748,6 +760,7 @@ def setGroupPosFull(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group qCritical("PatchCanvas::setGroupPos(%i, %i, %i, %i, %i) - unable to find group to reposition" % ( group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i)) + canvas.pending_position_changes[group_id] = (group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i) # ------------------------------------------------------------------------------------------------------------