From fef4ce2b39b1a00609122fe37e2378be2fa9319f Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 1 Apr 2021 16:46:05 -0400 Subject: Fix deleting connected ports in subgraphs --- src/server/events/Delete.cpp | 2 +- src/server/events/DisconnectAll.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src/server/events') diff --git a/src/server/events/Delete.cpp b/src/server/events/Delete.cpp index cd045820..7b284902 100644 --- a/src/server/events/Delete.cpp +++ b/src/server/events/Delete.cpp @@ -166,7 +166,7 @@ Delete::execute(RunContext& ctx) } GraphImpl* parent = _block ? _block->parent_graph() : nullptr; - if (_port) { + if (_ports_array && _port) { // Adjust port indices if necessary for (size_t i = 0; i < _ports_array->size(); ++i) { PortImpl* const port = _ports_array->at(i); diff --git a/src/server/events/DisconnectAll.cpp b/src/server/events/DisconnectAll.cpp index 0442ddd9..35254ba0 100644 --- a/src/server/events/DisconnectAll.cpp +++ b/src/server/events/DisconnectAll.cpp @@ -122,6 +122,18 @@ DisconnectAll::pre_process(PreProcessContext& ctx) dynamic_cast(a->head()))); } + // Create disconnect events to erase adjacent arcs in parent's parent + if (_port && _parent->parent()) { + GraphImpl* parent_parent = dynamic_cast(_parent->parent()); + for (const auto& a : adjacent_arcs(parent_parent)) { + _impls.push_back( + new Disconnect::Impl(_engine, + parent_parent, + dynamic_cast(a->tail()), + dynamic_cast(a->head()))); + } + } + if (!_deleting && ctx.must_compile(*_parent)) { if (!(_compiled_graph = compile(*_engine.maid(), *_parent))) { return Event::pre_process_done(Status::COMPILATION_FAILED); -- cgit v1.2.1