def mouseReleaseEvent(self, event): if self.tmp_link_item: self.force_link_dialog = bool(event.modifiers() & Qt.ShiftModifier) item = self.target_node_item_at(event.scenePos()) node = None stack = self.document.undoStack() self.macro = QUndoCommand(self.tr("Add link")) if item: # If the release was over a node item then connect them node = self.scene.node_for_item(item) else: # Release on an empty canvas part # Show a quick menu popup for a new widget creation. try: node = self.create_new(event) except Exception: log.error("Failed to create a new node, ending.", exc_info=True) node = None if node is not None: commands.AddNodeCommand(self.scheme, node, parent=self.macro) if node is not None: if self.direction == self.FROM_SOURCE: source_node = self.scene.node_for_item(self.source_item) sink_node = node else: source_node = node sink_node = self.scene.node_for_item(self.sink_item) self.suggestions.set_direction(self.direction) self.connect_nodes(source_node, sink_node) if not self.isCanceled() or not self.isFinished() and \ self.macro is not None: # Push (commit) the add link/node action on the stack. stack.push(self.macro) self.end() else: self.end() return False