diff --git a/toonz/sources/toonzqt/fxschematicnode.cpp b/toonz/sources/toonzqt/fxschematicnode.cpp index 24dcc76..0037e16 100644 --- a/toonz/sources/toonzqt/fxschematicnode.cpp +++ b/toonz/sources/toonzqt/fxschematicnode.cpp @@ -1616,13 +1616,25 @@ void FxSchematicPort::mouseMoveEvent(QGraphicsSceneMouseEvent *me) { if (!m_ghostLinks.isEmpty() && !m_ghostLinks[0]->isVisible()) m_ghostLinks[0]->show(); bool cntr = me->modifiers() == Qt::ControlModifier; + + if (!m_linkingTo) { + if (m_currentTargetPort) { + m_currentTargetPort->resetSnappedLinksOnDynamicPortFx(); + m_currentTargetPort = 0; + } + return; + } + + FxSchematicPort *targetPort = dynamic_cast(m_linkingTo); + assert(targetPort); + + if (m_currentTargetPort == targetPort) return; + if (m_currentTargetPort) { m_currentTargetPort->resetSnappedLinksOnDynamicPortFx(); m_currentTargetPort = 0; } - if (!m_linkingTo) return; - FxSchematicPort *targetPort = dynamic_cast(m_linkingTo); - assert(targetPort); + m_currentTargetPort = targetPort; TFx *targetFx = targetPort->getOwnerFx(); TZeraryColumnFx *colFx = dynamic_cast(targetFx); @@ -1643,8 +1655,16 @@ void FxSchematicPort::mouseMoveEvent(QGraphicsSceneMouseEvent *me) { targetFx->dynamicPortGroup(groupId)->ports(); int portId = getIndex(targetFxPort, groupedPorts); if (portId == -1) return; - if (targetFx != m_ownerFx && cntr && getType() == eFxOutputPort) - targetPort->handleSnappedLinksOnDynamicPortFx(groupedPorts, portId); + if (targetFx != m_ownerFx && getType() == eFxOutputPort) { + // inserting a link above + if (cntr) + targetPort->handleSnappedLinksOnDynamicPortFx(groupedPorts, portId); + // replacing a link + else + targetPort->handleSnappedLinksOnDynamicPortFx(groupedPorts, portId, + portId); + } + // switching links in the connected ports else if (targetFx == m_ownerFx && getType() == eFxInputPort) { if (!m_ghostLinks.isEmpty()) { for (SchematicLink *ghostLink : m_ghostLinks) diff --git a/toonz/sources/toonzqt/schematicnode.cpp b/toonz/sources/toonzqt/schematicnode.cpp index 218eba5..73fb596 100644 --- a/toonz/sources/toonzqt/schematicnode.cpp +++ b/toonz/sources/toonzqt/schematicnode.cpp @@ -836,6 +836,7 @@ void SchematicPort::mouseMoveEvent(QGraphicsSceneMouseEvent *me) { // Snapping SchematicPort *linkingTo = searchPort(me->scenePos()); + if (!linkingTo) { for (SchematicLink *ghostLink : m_ghostLinks) { ghostLink->updateEndPos(me->scenePos()); @@ -847,8 +848,12 @@ void SchematicPort::mouseMoveEvent(QGraphicsSceneMouseEvent *me) { m_linkingTo = nullptr; } } - // if to be connected something - else if (linkingTo != this) { + // if to be connected something new + else if (linkingTo != this && m_linkingTo != linkingTo) { + if (m_linkingTo) { + m_linkingTo->highLight(false); + m_linkingTo->update(); + } m_linkingTo = linkingTo; for (SchematicLink *ghostLink : m_ghostLinks) { ghostLink->updatePath(ghostLink->getStartPort(), linkingTo);